【ESP32教程之BLE】让废旧的电插板Smart

2017-07-065.3万
精华项目
AI 快速预览详细 收起
本教程介绍了如何使用ESP32的BLE通信功能,将废旧电插板改造成智能插座。所需硬件包括FireBeetle-ESP32主控板、Beetle BLE主板等。通过详细的步骤和代码示例,用户可以轻松完成改造,实现远程控制和状态显示。适合零基础新手尝试,无需复杂编程技能。
【ESP32教程之BLE】让废旧的电插板Smart图21

快来瞧瞧,Chocho又放大招啦~~~~~~

【ESP32教程之BLE】让废旧的电插板Smart图1


【ESP32教程之BLE】让废旧的电插板Smart图3


【ESP32教程之BLE】让废旧的电插板Smart图5


       没错,你没看错,这就是基于废旧的电插板改装的,采用ESP32的BLE通信,控制Beetle BLE主板的智能插板,让废旧的电插板秒变智能家居。一直以来,都说ESP32支持WiFi和蓝牙双重通信方式,但始终没有提供Arduino的库文件。作为Arduino小粉的我,着实捏了把汗。这个ESP32设备可以同时控制多个从机设备,我做了两个,亲测没问题。通过RGB灯显示插板是否可以给外面供电,绿色为使能,红色为不使能导通。

       我在想,是不是第一个使用ESP32-BLE来做东西的了???

       视频有点儿长,制作细节部分还是看下面的步骤吧。

所需硬件
       继电器模块
       Beetle BLE
       按键3个
       3D外壳

3D文件和相关的代码文件,点击链接下载,DFRobot_ESP32_WiFiBLE库文件点击下载。

制作过程
1、拆卸电源适配器和废旧电插板
     在拆卸电源适配器时,需要用镊子或者尖嘴钳撬开,我用的电源适配器没有螺丝,是直接用胶水固定的,拆的时候废了牛劲。

【ESP32教程之BLE】让废旧的电插板Smart图2

【ESP32教程之BLE】让废旧的电插板Smart图4

拆废旧电插板的步骤大家还是参考视频吧,各个厂家的电插板不一样。

【ESP32教程之BLE】让废旧的电插板Smart图6

【ESP32教程之BLE】让废旧的电插板Smart图7

【ESP32教程之BLE】让废旧的电插板Smart图8

2、电源连接线的制作
    需要找一段家用电线,随便什么型号的都行,然后拆掉外面的漆包线,长度大概在10cm左右。

【ESP32教程之BLE】让废旧的电插板Smart图9

【ESP32教程之BLE】让废旧的电插板Smart图10

【ESP32教程之BLE】让废旧的电插板Smart图11

3、焊接交流电源电线
    将电线的一端焊接到交流电输入处,注意焊锡不要太多,否则会漏到下面的插口连接处。

【ESP32教程之BLE】让废旧的电插板Smart图12

焊接完成后,用斜口钳取下USB供电接口。

【ESP32教程之BLE】让废旧的电插板Smart图13

然后焊接5V电源线,这是给Beetle主板和继电器供电的,并且用热熔胶固定。

【ESP32教程之BLE】让废旧的电插板Smart图14


4、主板元器件的连接
    电路原理图如下,其中D2控制继电器,D3控制RGB灯:
【ESP32教程之BLE】让废旧的电插板Smart图22

中间需要用热熔胶固定继电器、Beetle BLE主板、电插板,细节部分可以参考视频。

【ESP32教程之BLE】让废旧的电插板Smart图15

【ESP32教程之BLE】让废旧的电插板Smart图16

【ESP32教程之BLE】让废旧的电插板Smart图17

【ESP32教程之BLE】让废旧的电插板Smart图18

【ESP32教程之BLE】让废旧的电插板Smart图19

5、下载程序
    源码下载连接请往上看,Beetle BLE程序源码如下:

  1. #include <PlainProtocol.h>
  2. #include <Adafruit_NeoPixel.h>
  3. #define RELAY_PIN 3
  4. #define RGB_PIN 4
  5. enum{
  6.   STOP,
  7.   RUN,
  8.   DEFAULTSTOP
  9. };
  10. enum{
  11.   DEFAULTCOLOR,
  12.   RED,
  13.   GREEN,
  14.   BLUE
  15. };
  16. PlainProtocol mySerial(Serial,115200);
  17. Adafruit_NeoPixel strip = Adafruit_NeoPixel(1, RGB_PIN, NEO_GRB + NEO_KHZ800);
  18. boolean rgbBlink = false;
  19. char currentState = DEFAULTSTOP;
  20. unsigned long current_millis = 0;
  21. /*
  22. * 1->Red 2->Green 3->Blue default->close
  23. */
  24. void setRGBColor(int value){
  25.   switch(value){
  26.     case 1:
  27.        strip.setPixelColor(0, strip.Color(255, 0, 0));
  28.        break;
  29.     case 2:
  30.        strip.setPixelColor(0, strip.Color(0, 255, 0));
  31.        break;
  32.     case 3:
  33.        strip.setPixelColor(0, strip.Color(0, 0, 255));
  34.        break;
  35.     default:
  36.        strip.setPixelColor(0, strip.Color(0, 0, 0));
  37.        break;
  38.   }
  39.   strip.show();
  40. }
  41. void setRelayState(char value){
  42.   if(value == RUN){
  43.     currentState = RUN;
  44.     digitalWrite(RELAY_PIN,HIGH);
  45.     setRGBColor(GREEN);
  46.   }else{
  47.     currentState = STOP;
  48.     digitalWrite(RELAY_PIN,LOW);
  49.     setRGBColor(RED);
  50.   }
  51. }
  52. void updateState(void){
  53.   mySerial.write("STATE",currentState);
  54. }
  55. void blinkLoop(void){
  56.   static int iRGB = 0;
  57.   static int times = 0;
  58.   if(rgbBlink){
  59.     if(iRGB){
  60.      setRGBColor(DEFAULTCOLOR);
  61.     }else{
  62.       if(currentState==DEFAULTSTOP){
  63.         setRGBColor(BLUE);
  64.       }else if(currentState==RUN){
  65.         setRGBColor(GREEN);
  66.       }else if(currentState==STOP){
  67.         setRGBColor(RED);
  68.       }
  69.       if(times > 50){
  70.         rgbBlink = false;
  71.       }
  72.     }
  73.     times++;
  74.   }else{
  75.     setRelayState(currentState);
  76.     times = 0;
  77.   }
  78.   iRGB=~iRGB;
  79. }
  80. void timerRun(void){
  81.   if((millis()- current_millis)>200){
  82.     current_millis = millis();
  83.     blinkLoop();
  84.     updateState();
  85.   }
  86. }
  87. void setup() {
  88.   Serial.begin(115200);
  89.   current_millis = millis();
  90.   strip.begin();
  91.   strip.show();
  92.   pinMode(RELAY_PIN, OUTPUT);
  93.   digitalWrite(RELAY_PIN,LOW);
  94.   setRGBColor(BLUE);
  95. }
  96. void loop() {
  97.   if(mySerial.available()){
  98.     if(mySerial.equals("RELAYSTATE")){
  99.       int value = mySerial.read();
  100.       setRelayState(value);
  101.     }else if(mySerial.equals("SCAN")){
  102.       int value = mySerial.read();
  103.       if(value==1)
  104.        rgbBlink = true;
  105.       else
  106.        rgbBlink = false;
  107.     }
  108.   }
  109.   timerRun();
  110. }
复制代码

FireBeetle Board-ESP32主控板代码如下:
  1. <div align="center"><div align="left">#include "DFRobot_ESP32_BLE.h"
  2. DFRobot_ESP32_BLE ble;
  3. char dataName[15] = {'\0'};
  4. boolean relay1 = false;
  5. boolean relay2 = false;
  6. boolean scan = false;
  7. void scanKeys(void){
  8.   if(digitalRead(D2) == LOW){
  9.     delay(5);
  10.     while(digitalRead(D2) == LOW);
  11.     String sendStr = "<RELAYSTATE>";
  12.     if(relay1 == false){
  13.       sendStr = sendStr+"1;";
  14.       relay1 = true;
  15.     }else{
  16.       sendStr = sendStr+"0;";
  17.       relay1 = false;
  18.     }
  19.     ble.writedata("Chocho1", sendStr);
  20.   }
  21.   
  22.   if(digitalRead(D5) == LOW){
  23.     delay(5);
  24.     while(digitalRead(D5) == LOW);
  25.     String sendStr = "<RELAYSTATE>";
  26.     if(relay2 == false){
  27.       sendStr = sendStr+"1;";
  28.       relay2 = true;
  29.     }else{
  30.       sendStr = sendStr+"0;";
  31.       relay2 = false;
  32.     }
  33.     ble.writedata("Chocho2", sendStr);
  34.   }
  35.   if(digitalRead(D9) == LOW){
  36.     delay(5);
  37.     while(digitalRead(D9) == LOW);
  38.     String sendStr = "<SCAN>";
  39.     if(scan == false){
  40.       sendStr = sendStr+"1;";
  41.       scan = true;
  42.     }else{
  43.       sendStr = sendStr+"0;";
  44.       scan = false;
  45.     }
  46.     ble.writedata("Chocho1", sendStr);
  47.     delay(10);
  48.     ble.writedata("Chocho2", sendStr);
  49.   }
  50.   delay(20);
  51. }
  52. void setup() {
  53.   //Serial.begin(115200);
  54.   pinMode(D2,INPUT);
  55.   pinMode(D5,INPUT);
  56.   pinMode(D9,INPUT);
  57.   ble.setService(0xdfb0);
  58.   ble.setCharacteristic(0xdfb1);
  59.   ble.setconnummax(2);
  60.   ble.setconnectname0("Chocho1");
  61.   ble.setconnectname1("Chocho2");
  62.   ble.init();
  63.   delay(100);
  64.   ble.begin();
  65. }
  66. void loop() {
  67.   String bledata = ble.readdata(dataName);
  68.   if (bledata.length() > 0) {
  69.     if (strncmp(dataName, "Chocho1", strlen("Chocho1")) == 0) {
  70.       //Serial.print("Chocho1:");
  71.       //Serial.println(bledata);
  72.     } else if (strncmp(dataName, "Chocho2", strlen("Chocho2")) == 0) {
  73.       //Serial.print("Chocho2:");
  74.       //Serial.println(bledata);
  75.     }
  76.   }
  77.   scanKeys();
  78. }
  79. </div></div>
复制代码

ps:怎么下载程序,应该不用我说了吧~~~~~~~~~

6、整机组装

     用热熔胶固定插头,然后装进外壳

【ESP32教程之BLE】让废旧的电插板Smart图20

然后,就没有然后了~~~~~~~~~

【ESP32教程之BLE】让废旧的电插板Smart图23

ESP32技术交流群: 619558168

欢迎来踩个人博客:www.seemaker.cn

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(17)
王奕翔
太棒了!
luna
[align=left] [/align][align=left][font=微软雅黑]中文版[/font] : ESP32教程汇总贴[/align][align=left][font=微软雅黑]英文版[/font] : ESP32 tutorial汇总贴[/align][align=left][url=https://www.dfrobot.com.cn/goods-1441.html]
[/url]ESP32教程汇总:
[font=微软雅黑]用于构建[/font]ESP32编译环境的Arduino IDE[/align][align=left]ESP32教程:MicroPython支持[/align][align=left]ESP32 MicroPython教程:连接Wi-Fi网络[/align][align=left]ESP32 MicroPython教程:解析JSON[/align][align=left]ESP32 MicroPython教程:编码JSON[/align][align=left]ESP32 / ESP8266 MicroPython教程:从计算机运行脚本[/align][align=left]ESP32 / ESP8266 MicroPython教程:HTTP GET请求[/align][align=left]ESP32 / ESP8266 MicroPython教程:自动连接WiFi
ESP32 MicroPython教程:使用SHA-256
ESP32 / ESP8266 MicroPython教程:从文件系统运行脚本ESP32 / ESP8266 MicroPython:HTTP POST请求
ESP32 MicroPython教程:用uPyCraft执行脚本
ESP32 MicroPython教程:uPyCraft IDE入门
[font=微软雅黑]【[/font]FireBeetle基础教程】电源供电说明
[font=微软雅黑]如何在树莓派上给[/font]firebeetle esp32编程
[font=微软雅黑]【[/font]ESP-WROOM-32教程—Lesson 1】Arduino IDE for ESP32编译环境的搭建
ESP32项目汇总:
[ESP32酷炫应用] 8X8X8光立方
[font=微软雅黑]关于[/font]Firebeetle Board-ESP32低功耗水果电池的实验
[font=微软雅黑]【[/font]FireBeetle Board-ESP32教程之一】Blynk—控制LED灯
[font=微软雅黑]【[/font]FireBeetle Board-ESP32应用教程】让你的打火机可穿戴
[font=微软雅黑]【[/font]FireBeetle Board-ESP32应用教程】跑步运动的计步神器
[font=微软雅黑]【[/font]ESP32教程之BLE】让废旧的电插板Smart[/align][table]
[tr][td=864][align=center][align=left]【ESP32教程之保险柜】让饮品不再被偷走[/align][align=left]【ESP32教程】音乐播放机[/align][align=left]【ESP32教程】DIY智能机械臂[/align][align=left]ESP32太阳能气象站[/align][align=left]ESP32太阳能气象站[/align][align=left]让我们造一把红外测温枪来感受夏天 - 使用FireBeetle ESP32[/align][align=left]使用FireBeetle Board ESP32 制作电子徽章[/align][/align][/td][/tr]
[/table][align=left][font=微软雅黑]【[/font]ESP8266教程—Lesson 1】Arduino IDE for ESP8266编译环境的搭建
[font=微软雅黑]【[/font]ESP8266教程—Lesson2】智能化你的浇花神器
[font=微软雅黑]【[/font]ESP8266教程—Lesson3】小风扇的变形记
[font=微软雅黑]【[/font]ESP8266教程—Lesson4】大大大事不好啦,8266变电功耗检测器
ESP32测评报告:
[font=微软雅黑]【[/font]FireBeetle Board-ESP32评测报告之一】开箱并驱动oled
[font=微软雅黑]【[/font]FireBeetle Board-ESP32评测报告之二】温度上送物联网OLED显示
[font=微软雅黑]【[/font]FireBeetle Board-ESP32评测报告之三】LED温度表
[font=微软雅黑]【[/font]FireBeetle Board-ESP32评测报告之四】bylnk之桥(心率显示)
[font=微软雅黑]【[/font]FireBeetle Board-ESP32评测之】micropython上传小工具
[font=微软雅黑]【[/font]FireBeetle开箱】ESP32 Wi-Fi+BLE~~~[/align][align=left] [/align]
Trroyet
热熔胶120度融化 pla80度变软 这个作品如果一不小心接了个大功率 然后出门了 很危险
Chocho2017
Chocho2017
作者
回复Trroyet
接灯什么的,就没问题呀。
CJY
谢谢分享
Mickey
没有看到主机的制作过程啊!
Chocho2017
Chocho2017
作者
回复Mickey
主机是在意念中制作的。
创客多多
太厉害了,一看就是大侠,但是你剥线的动作太吓人了,好歹也买个剥线钳来吧,哈哈!
Chocho2017
呵呵。刀子顺手。
创客火
不错,支持,只是为什么看第一个图感觉有点污:lol
Chocho2017
Chocho2017
作者
回复创客火
gif没弄好,结果看了下效果,感觉很搞笑,就放上去了,增添喜剧色彩。
oksuyong2006
:handshake不错,支持
Chocho2017
呵呵,谢谢咯。
xiaohe9527
还有BLE模式能不能详细讲一下啊?
Chocho2017
Chocho2017
作者
回复xiaohe9527
你可以扫一下视频后面的微信二维码,加我微信,这样方便沟通。:lol
Chocho2017
Chocho2017
作者
回复xiaohe9527
ESP32的ble是作为主机的,Beetle BLE是作为从机,ESP32直接连接它就好了。
xiaohe9527
两块板子有主从机模式吗?
xiaohe9527
带码看起来有点累,能不能注释一下啊
xiaohe9527
做的真好
Chocho2017
Chocho2017
作者
回复xiaohe9527
谢谢支持。
秦皇岛岛主
gif大神
ivenlin2017
这个必须点个赞!
Chocho2017
Chocho2017
作者
回复ivenlin2017
呵呵,谢谢了啦。
luna
被两针动图戳中笑点~~感觉可以盯着看一个世纪~~
nicho
nicho回复luna
哈哈哈哈哈我也是
Chocho2017
Chocho2017
作者
回复luna
评论内容
hnyzcj
板凳
Chocho2017
Chocho2017
作者
照例,自己抢个沙发先。
- 没有更多了 -