实训1——蓝牙开锁

实训一:蓝牙开锁

一、实验目的

ESP32的蓝牙模块接收手机传过来的开锁命令和密码,通过判断密码是否正确来确定舵机是否转动

二、实验内容

1.ESP32与舵机进行连接
2.ESP32连接手机蓝牙
3.手机通过BLE调试助手向ESP32发送开锁命令和密码
4.ESP32接收数据后判断舵机是否转动
ps:开锁命令是

三、实验设备

1.ESP32开发板
2.SG90舵机
3.手机APP BLE调试助手

四、实验步骤

1) 环境配置

1.打开Arduino IDE,选择左上角 工具–开发板,选择对应的开发板(ESP32DevModule)
2.选择 工具–端口 , 选择对应的端口
3.此实训需要的ESP32的servo库之前已经导入

2)连接引脚
SG90:

SG90 的引脚:红色的连接5V电压,黄色为PWM信号线,棕色为接地线

连接:

连接图

3)上传程序
#include <dummy.h>
#include <Servo.h>
#include <BLEDevice.h>
#include <BLE2902.h>
#include <String.h>
#define SERVO_PIN 15

BLECharacteristic *pCharacteristic;
bool deviceConnected = false;
#define SERVICE_UUID           "6E400001-B5A3-F393-E0A9-E50E24DCCA9E"   
#define CHARACTERISTIC_UUID_RX "6E400002-B5A3-F393-E0A9-E50E24DCCA9E"
#define CHARACTERISTIC_UUID_TX "6E400003-B5A3-F393-E0A9-E50E24DCCA9E"
#define openInterval  5000 
byte ble_rx_buffer[20]; //接收蓝牙指令
byte verfi_code[6] = {0x31,0x32,0x33,0x34,0x35,0x36};//初始密码
Servo myservo;
int pos=0;
bool toggle; //开锁判断位
void locker(bool toggle) { //开锁
  myservo.attach(SERVO_PIN); 
  if (toggle) {
    myservo.write(90); // 开锁
  } else {
    myservo.write(0); // 关锁
  }
  delay(250); // 等马达转到定位
  myservo.detach();
}
class MyServerCallbacks: public BLEServerCallbacks {
    void onConnect(BLEServer* pServer) {
      deviceConnected = true;
    };
    void onDisconnect(BLEServer* pServer) {
      deviceConnected = false;
    }
};
//55aa0010313233343536 蓝牙发送开门指令,hex 16进制发送
class MyCallbacks: public BLECharacteristicCallbacks {
    void onWrite(BLECharacteristic *pCharacteristic) {
      std::string rxValue = pCharacteristic->getValue(); 
      byte op;
      for (int i = 0; i < rxValue.length(); i++){
          ble_rx_buffer[i] = rxValue[i];
          Serial.print(rxValue[i]);
       }
       if(ble_rx_buffer[0] == 0x55 && ble_rx_buffer[1] == 0xaa){
            op=ble_rx_buffer[3];
       
       switch(op){
        case 0x10:{ //蓝牙开门
          if(memcmp(ble_rx_buffer+5,verfi_code,6)){
             toggle = true;  
             Serial.println("开门成功");     
          }
          else{
            Serial.println("密码错误");
          }
          break;
        }
        case 0x20:{ //设置密码
          break;
        }
        case 0x30:{ //查看指纹
          break;
        }
        case 0x31:{//添加指纹
          break;
        }
        case 0x32:{ //删除指纹
          break;
        }
       }
       //locker(toggle);
     }
    }
};

void setupBLE(String BLEName){           //连接蓝牙
  const char *ble_name = BLEName.c_str();       
  BLEDevice::init(ble_name);                    
  BLEServer *pServer = BLEDevice::createServer(); //创建服务
  pServer->setCallbacks(new MyServerCallbacks());
  BLEService *pService = pServer->createService(SERVICE_UUID);    
  pCharacteristic = pService->createCharacteristic(CHARACTERISTIC_UUID_TX,BLECharacteristic::PROPERTY_NOTIFY);  
  pCharacteristic->addDescriptor(new BLE2902());  //添加描述
  BLECharacteristic *pCharacteristic = pService->createCharacteristic(CHARACTERISTIC_UUID_RX,BLECharacteristic::PROPERTY_WRITE);
  pCharacteristic->setCallbacks(new MyCallbacks());  //receive message callback  
  pService->start();// Start the service
  pServer->getAdvertising()->start();// Start advertising
  Serial.println("Waiting a client connection to notify...");
}

void setup() { 
  Serial.begin(115200);
  setupBLE("ESP32 Device");//设置蓝牙名称
  myservo.attach(SERVO_PIN); //引脚12为PWM脚  
}
void loop() {
  static unsigned long toggle_time = millis();
  static bool lock_back_flag=false;
  if(toggle){ //开门计时
    locker(toggle); //开锁
    toggle = false;
    lock_back_flag = true;
    toggle_time = millis();
  }
  if(millis() - toggle_time > openInterval && lock_back_flag){  //回锁时间
    lock_back_flag = false;
    locker(toggle);//回锁
  }
}
4)手机APP发送信息
通讯协议:
字段帧头标识校验和数据
长度2B1B1B16B

帧头:55aa
标识:
10 : 蓝牙开门
20:设置密码
30:查看指纹
31:添加指纹
32:删除指纹
检验和:目前不做校验,填00即可
数据: 16字节,可以不填满

蓝牙开门
字段帧头标识校验和数据
内容55aa10006B初始密码

蓝牙开门发送消息案例:55aa1000313233343536
ps:都是以16进制发送,对应相应的ASCII码

在这里插入图片描述

5)发送成功观察串口监视器内容和舵机状态

串口监视器:
在这里插入图片描述

舵机:转90度后5s回转

  • 3
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
智能家居安装与维护实训室项目 一、智能家居安装与维护实训室建设总体规划 智能家居行业实训室应从从智能家居的识别、感知、通讯传输、组网技术以及数据分 析方面,围绕专业建设、人才培养规范,以智能家居专业方向核心课程、学生实验为目 标,建立一个完整的基础的实验架构体系。实训室的建设满足以下的基本要求: 能够满足学校该专业的人才培养和教学基本要求; 能够既满足院校智能家居专业课的又满足智能家居行业实验课要求; 能够支撑智能家居专业课程教学,强调培养学生的安装及调测、管理技能; 能够支撑智能家居教学实验,能实现智能家居各知识点的各种实验; 能够满足学校科研以及竞赛工作; 能够满足智能家居产业综合创新的实验实验,如移动物联、智能家居、智能交通等 。 智能家居行业应用是智能家居专业基础实训室的进阶,主要针对二、三年级的学生实 习;学生可以通过行业应用实验产品的训练进一步了解各种智能家居技术典型应用,进 行模拟训练;能够从这种实验产品中学习到传感器、WSN及嵌入式的知识,有一个进一步 的认识。通过丰富多彩的智能家居实验案例及体验,可以激发学生的想象力,充分调动 学生的积极性,并提供多样化的集知识性和趣味性于一体的超强用户体验。让学生可以 在实训室就能看到行业内的现状,培养学员动手设计的能力,成为有特色能力的专业技 术人才。可以按照学生自己的兴趣爱好分配实验系统,专业,专注,针对性强。同时该 实训室还可以针对优秀的学生竞赛、升学实验。 根据智能家居专业采用递进式教学方式融合项目教学方法的建设思路,规划了符合教 学目标要求设计的,根据专业不同的知识结构确定各个实践模块。本次智能家居实训室 建设拟建设: 智能家居行业互动体验中心,其中包括 智能家居样板操作间 智能家居沙盘 智能交通沙盘 智能家居实训室体验中心系统 二、实训室建设要求 根据学校教室面积、学生数量等实际情况,设计集认知教学、理论教学、实验教学 于一体,做到基础实验教学、行业应用教学、竞赛指导三位合一。 实训室场景应用方案均直接来自实际应用环境,可以解决实际应用问题。基地建设 融合产业发展趋势,设计模式吻合教学体系。智能家居专业所涵括的基础课和专 业课诸如:智能家居概论、信号与系统、计算机网络、现代通信网、传感器原理 、嵌入式系统设计、无线通信原理、无线传感器网络、近距无线传输技术、数据 采集与处理、智能家居安全技术、智能家居组网技术等均可在此完成实验课程并 可加以创新拓展; 全部硬件设备的说明文档并提供相应的实验指导书。 三、采购内容: "序号 "货物名称 "单位 "数量 " "1 "智能家居安装维护实训 "套 "12 " " "装置 " " " "2 "智能家居沙盘 "套 "1 " "3 "智能交通沙盘 "套 "1 " "4 "智慧化改造 "套 "1 " 四、设备配置及要求: "序号"设备 "配置及技术要求 " " "名称 " " "1 "智能 "一、智能家居样板操作间1套: " " "家居 "*1.整套设备采用钢结构及铝合金型材承重支架,组成半封闭实训环 " " "安装 "境,模拟真实家居环境;尺寸为:2520×2450×1280mm。 " " "维护 "*2.钣金采用1.5mm加厚型钢板,数控冲铣网孔、便于学生组装设备及" " "实训 "布线实习; " " "装置 "3.实训工位整体色调一致、整个系统采用烤漆工艺,确保产品不易生" " " "锈、易维护和保养; " " " "4.模块化设计,标准连接件,积木式架构,可随意组装成各种结构," " " "便于维护、拆卸和运输; " " " "5. 样板间顶部钢板采用滑块式前置型固定法。侧板采用挡片式后置 " " " "式固定法;侧面靠下装有活动桌面,必须采用前置式固定法,牢固可" " " "靠,保证安全; " " " "6. 样板间上固定线槽,线槽内布置实训专用的电源线;支持每一个 " " " "实训所用部件的供电; " " " "7. 样板间必须满足国家用电安全相关标准,必须带有漏电保护装置 " " " ",以保证用电安全; " " " "8.同时支持通过用平板电脑、手机和网关来控制以上样板间设备。 " " " "安装配套实训部件: " " " "9. 电子门禁:安装在每个工位的侧面,学生通过刷卡和集中控制方 " " " "式可控制门禁通行; 强制门状态为常开或者常闭功能。 " " " "(1) " " " "电插锁:可用电控开启、远程开启和手动开启,关门自动上锁;适用" " " "于左门、右门、内开门与外开门等各种扇门;锁舌伸出长度>20mm," " " "符合GA/T73-94 " " " "5.1.6B级标准;与门禁等系统配套使用;电压:DC12V,开锁电流<300" " " "mA,静态20mA,开锁灵敏度1s; 使用寿命长

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值