【训练营_进阶班】ESP8266插座开发板(详细教程) - 嘉立创EDA开源硬件平台

编辑器版本 ×
标准版 Standard

1、简单易用,可快速上手

2、流畅支持300个器件或1000个焊盘以下的设计规模

3、支持简单的电路仿真

4、面向学生、老师、创客

专业版 professional

1、全新的交互和界面

2、流畅支持超过3w器件或10w焊盘的设计规模,支持面板和外壳设计

3、更严谨的设计约束,更规范的流程

4、面向企业、更专业的用户

标准版 【训练营_进阶班】ESP8266插座开发板(详细教程)

  • 5.4k
  • 13
  • 45

简介:基于ESP8266的SOC开发板

开源协议: GPL 3.0

(未经作者授权,禁止转载)

创建时间: 2020-08-05 23:30:01
更新时间: 2024-04-16 18:23:31
描述
# 基于ESP-12F的智能插座测试板 #### **功能描述** 通过ESP8266接入互联网,实现远程控制,可连接米家实现小爱同学语音控制(百度小度和天猫精灵由于没有设备无法测试,理论上同时可支持三大精灵)。板上有ch340下载电路,设计有自动下载电路,方便烧录调试。 ## 设计过程 ### 一、元件选型 1.主控选择ESP-12F,支持SOC可以节省PCB空间,降低电路复杂程度,同时ESP8266支持arduino开发,可大大降低编程难度,安可信的ESP-12F(ESP8266的模块)也十分廉价,所以选用ESP-12F。 2.下载部分采用CH340C,兼容性好,外围电路简单,成本低。 3.继电器驱动采用安森美的感性负载驱动NUD3124. ### 二、PCB设计(略) 没什么好说的,注意*强电弱电的隔离,天线的布局*。 ### 三、开发环境 采用arduino IDE开发,使用[点灯科技](https://diandeng.tech/doc)(blinker)的库,arduino[环境搭建](https://www.arduino.cn/thread-76029-1-1.html "arduino环境搭建") [blinker库文件](https://github.com/blinker-iot/blinker-library/archive/master.zip "blinker库文件") Windows:将下载好的blinker库解压到 我的电脑>文档>Arduino>libraries 文件夹中 Mac OS:将下载好的blinker库解压到 文稿>Arduino>libraries 文件夹中 环境搭建好后选择NodeMCU,如图 ![image.png](//image.lceda.cn/pullimage/Yy6xYTQv5Z2IZtqFZqJKpNjlyx44WLsgPUSKpeWr.png) #### NodeMCU引脚定义 D0~D8: 数字输入引脚。 PWM: 所有数字I/O都可用于PWM输出 串口: Serial(TX-D10/RX0-D9)可用于和计算机或其他设备通信,Serial1(TX1-D4)只有输出端口,可用向其他设备发送数据。 SPI: MISO\MOSI\SCK引脚可用于SPI通信。 IIC: 实际上D0~D8都可以用作IIC通信。 A0: 只能做模拟输入使用,输入电压范围为0~3.3V,8-bit精度。 L: 位于8266模块上的LED,该LED连接到D2引脚,可以使用宏LED_BUILTIN编程控制
可以使用Dx或引脚对应的GPIO编号控制引脚,如 `a=digitalRead(D1)` `a=digitalRead(5)` **不建议使用的引脚** **程序烧写时,会使用到TXD0\RXD0\GPIO0 三个引脚,如需使用,请烧写完成后,再连接外设使用。** **esp8266模块内部使用了一些IO,如S1\S2\S3\SC\SO\SK\GPIO15,编程时请不要调用,否则可能造成程序运行错误。** IO模式设置:INPUT(输入模式),OUTPUT(输出模式),INPUT_PULLUP(上拉输入模式) ![4456352-8938615d16aa9d71.webp.jpg](//image.lceda.cn/pullimage/wAK21C73PcSQyYerr1SOkoQxUWXhlEexUONq1DUN.jpeg) ### 四、程序 ``` arduino #define BLINKER_WIFI //官方wifi协议库 #define BLINKER_MIOT_OUTLET //设置小爱插座类库 #define BLINKER_ALIGENIE_OUTLET //设置天猫插座类库 #define BLINKER_DUEROS_OUTLET //设置小度插座类库 #define BLINKER_PRINT Serial //串口协议库 #define BLINKER_ESP_SMARTCONFIG //SmartConfig配网 #include #define LED_BUILTIN D4 //LED #define RELAY_PIN 4 //继电器 const int buttonPin = D1; //按键 int lastButtonState = 0; // 新建组件对象 BlinkerButton Button1("btn-abc"); //设置app按键的键名 char auth[] = "f3fd6e961589"; //Your Device Secret Key //char ssid[] = "CU_buce"; //你的Wi-Fi网络的SSID或名称(SmartConfig自动配网时可忽略) //char pswd[] = "zj.629858"; //您的WiFi网络WPA密码或WEP密钥(SmartConfig自动配网时可忽略) bool oState = false; // app上按下按键即会执行该函数 void button1_callback(const String & state) { BLINKER_LOG("get button state: ", state); //串口打印 if (state=="on") { //如果state是on状态 digitalWrite(LED_BUILTIN, LOW); //LED开 digitalWrite(RELAY_PIN, LOW); //继电器开 Button1.color("#00BB00"); //设置app按键是绿色 // 反馈开关状态 Button1.print("on"); oState = true; } else if(state=="off"){ digitalWrite(LED_BUILTIN, HIGH); //LED关 digitalWrite(RELAY_PIN, HIGH); //继电器关 Button1.color("#FF0000"); //设置app按键是红色 // 反馈开关状态 Button1.print("off"); oState = false; } } //*******如果小爱有对设备进行操作就执行下面 void miotPowerState(const String & state) { BLINKER_LOG("need set power state: ", state); if (state == BLINKER_CMD_ON) { digitalWrite(LED_BUILTIN, LOW); digitalWrite(RELAY_PIN, LOW); Button1.color("#00BB00"); //设置app按键是绿色 BlinkerMIOT.powerState("on"); BlinkerMIOT.print(); Button1.print("on"); oState = true; } else if (state == BLINKER_CMD_OFF) { digitalWrite(LED_BUILTIN, HIGH); digitalWrite(RELAY_PIN, HIGH); Button1.color("#FF0000"); //设置app按键是红色 BlinkerMIOT.powerState("off"); BlinkerMIOT.print(); Button1.print("off"); oState = false; } } void miotQuery(int32_t queryCode) { BLINKER_LOG("MIOT Query codes: ", queryCode); switch (queryCode) { case BLINKER_CMD_QUERY_ALL_NUMBER : BLINKER_LOG("MIOT Query All"); BlinkerMIOT.powerState(oState ? "on" : "off"); BlinkerMIOT.print(); break; case BLINKER_CMD_QUERY_POWERSTATE_NUMBER : BLINKER_LOG("MIOT Query Power State"); BlinkerMIOT.powerState(oState ? "on" : "off"); BlinkerMIOT.print(); break; default : BlinkerMIOT.powerState(oState ? "on" : "off"); BlinkerMIOT.print(); break; } } //*******如果天猫精灵有对设备进行操作就执行下面 void aligeniePowerState(const String & state) { BLINKER_LOG("need set power state: ", state); if (state == BLINKER_CMD_ON) { digitalWrite(LED_BUILTIN, LOW); digitalWrite(RELAY_PIN, LOW); Button1.color("#00BB00"); //设置app按键是绿色 BlinkerAliGenie.powerState("on"); BlinkerAliGenie.print(); Button1.print("on"); oState = true; } else if (state == BLINKER_CMD_OFF) { digitalWrite(LED_BUILTIN, HIGH); digitalWrite(RELAY_PIN, HIGH); Button1.color("#FF0000"); //设置app按键是红色 BlinkerAliGenie.powerState("off"); BlinkerAliGenie.print(); Button1.print("off"); oState = false; } } void aligenieQuery(int32_t queryCode) { BLINKER_LOG("AliGenie Query codes: ", queryCode); switch (queryCode) { case BLINKER_CMD_QUERY_ALL_NUMBER : BLINKER_LOG("AliGenie Query All"); BlinkerAliGenie.powerState(oState ? "on" : "off"); BlinkerAliGenie.print(); break; case BLINKER_CMD_QUERY_POWERSTATE_NUMBER : BLINKER_LOG("AliGenie Query Power State"); BlinkerAliGenie.powerState(oState ? "on" : "off"); BlinkerAliGenie.print(); break; default : BlinkerAliGenie.powerState(oState ? "on" : "off"); BlinkerAliGenie.print(); break; } } //*******如果小度有对设备进行操作就执行下面 void duerPowerState(const String & state) { BLINKER_LOG("need set power state: ", state); if (state == BLINKER_CMD_ON) { digitalWrite(LED_BUILTIN, LOW); digitalWrite(RELAY_PIN, LOW); Button1.color("#00BB00"); //设置app按键是绿色 BlinkerDuerOS.powerState("on"); BlinkerDuerOS.print(); Button1.print("on"); oState = true; } else if (state == BLINKER_CMD_OFF) { digitalWrite(LED_BUILTIN, HIGH); digitalWrite(RELAY_PIN, HIGH); Button1.color("#FF0000"); //设置app按键是红色 BlinkerDuerOS.powerState("off"); BlinkerDuerOS.print(); Button1.print("off"); oState = false; } } void duerQuery(int32_t queryCode) { BLINKER_LOG("DuerOS Query codes: ", queryCode); switch (queryCode) { case BLINKER_CMD_QUERY_POWERSTATE_NUMBER : BLINKER_LOG("DuerOS Query power state"); BlinkerDuerOS.powerState(oState ? "on" : "off"); BlinkerDuerOS.print(); break; case BLINKER_CMD_QUERY_TIME_NUMBER : BLINKER_LOG("DuerOS Query time"); BlinkerDuerOS.time(millis()); BlinkerDuerOS.print(); break; default : BlinkerDuerOS.powerState(oState ? "on" : "off"); BlinkerDuerOS.print(); break; } } //如果本地开关有动作执行下面手动模式 void KeyDetection(void){ if((digitalRead(buttonPin)==LOW)&&lastButtonState==0){ Blinker.delay(15); //延时15ms消抖 if((digitalRead(buttonPin)==LOW)){ //确定按键按下 digitalWrite(LED_BUILTIN, oState); digitalWrite(RELAY_PIN,oState); Button1.color(oState ? "#FF0000" : "#00BB00"); Button1.print(oState ? "off" : "on"); oState = !oState; lastButtonState = !lastButtonState; } }else if(digitalRead(buttonPin)==HIGH&&lastButtonState==1){ lastButtonState = !lastButtonState; } } // 心跳包函数 void heartbeat() { if (digitalRead(RELAY_PIN)==LOW) { // 反馈开关状态 Button1.print("on"); Button1.color("#00BB00"); //设置app按键是绿色 oState = true; } else if(digitalRead(RELAY_PIN)==HIGH){ // 反馈开关状态 Button1.print("off"); Button1.color("#FF0000"); //设置app按键是红色 oState = false; } } void setup() { Serial.begin(115200); //初始化串口 BLINKER_DEBUG.stream(Serial); //输出调试信息 pinMode(LED_BUILTIN, OUTPUT); //初始化有LED的IO digitalWrite(LED_BUILTIN, HIGH); //默认上电时关 pinMode(buttonPin, INPUT_PULLUP); //初始化按键IO为内部上拉 pinMode(RELAY_PIN, OUTPUT); //初始化继电器IO digitalWrite(RELAY_PIN, HIGH); //默认上电时关 Blinker.begin(auth); //初始化bliker Button1.attach(button1_callback); //app上操作必须的注册回调函数关联按键名“Button1”和判断程序“button1_callback BlinkerMIOT.attachPowerState(miotPowerState); //小爱语音操作注册函数 BlinkerMIOT.attachQuery(miotQuery); //小爱语音操作回调函数 BlinkerAliGenie.attachPowerState(aligeniePowerState);//天猫语音操作注册函数 BlinkerAliGenie.attachQuery(aligenieQuery); //天猫语音操作回调函数 BlinkerDuerOS.attachPowerState(duerPowerState); //小度语音操作注册函数 BlinkerDuerOS.attachQuery(duerQuery); //小度语音操作回调函数 Blinker.attachHeartbeat(heartbeat);//app定时向设备发送心跳包, 设备收到心跳包后会返回设备当前状态进行语音操作和app操作同步。 } void loop() { Blinker.run(); KeyDetection(); } ```

### 五、一键配网 程序采用的SmartConfig配网,可使用安信可微信配网(AIRKISS)、乐鑫(ESPTOUCH)配网等。 接入米家需要在米家-我的-其他平台设备-添加,绑定点灯科技账号即可 ### 六、使用演示 程序内置了三大精灵(小爱同学,天猫精灵,百度小度)的语音控制,由于我只有小爱同学,所以另外两个未作测试,如果测试另外两个出现问题,可以反馈给我。
设计图
原理图
1 /
PCB
1 /
未生成预览图,请在编辑器重新保存一次
工程视频/附件
序号 文件名称 下载次数
1

ESP8266智能插座.mp4

406
2

小爱同学演示.mp4

241
3

v1.0.ino

27
工程成员
侵权投诉
相关工程
换一批
加载中...
添加到专辑 ×

加载中...

温馨提示 ×

是否需要添加此工程到专辑?

温馨提示
动态内容涉嫌违规
内容:
  • 153 6159 2675

服务时间

周一至周五 9:00~18:00
  • 技术支持

support
  • 开源平台公众号

MP