记录如何使用Arduino IDE对ESP-01s与继电器控制进行编程,通过巴法云做出一个可以用智能音响开关灯的例子。
ESP-01s和ESP-01区别
ESP8266-01简称ESP-01;ESP8266-01s简称ESP-01s。
1、外观区别
- ESP01模块上电和信号传输在天线区域右下角有2个LED灯,红色LED上电的时候闪烁,串口通讯的时候蓝色LED闪烁;
- ESP01s整个模块上只有一个蓝色LED,上电和串口通讯都是蓝色LED闪烁。
- 如图左边是ESP01s,右边是ESP01(图片来源https://www.cnblogs.com/easyidea/p/11525197.htm)
- ESP01s模块背面有引脚说明,ESP01背面没有。
2、电路区别
-
ESP01s内部电路相较于ESP01做了优化,
-
LED灯的管脚发生变化,由ESP01的TXD0变成ESP01s的GPIO2引脚;
-
ESP01s模块的IO0、RST、EN引脚上加了上拉电阻,也就是说在连接了3v3引脚后这三个引脚也自动连接上高电平,无需再EN引脚上外接高电平。
ESP-01s模式
- 下载模式
该模式下,esp01s不会运行烧录的程序,,使用arduinoIDE对其直接编程,并烧录程序。
接线,如下
RX --> TX
TX --> RX
IO0 --> GND
IO2 --> VCC
GND --> GND
3v3 --> VCC
RST --> VCC
EN --> VCC
- 运行模式
该模式,与下载模式接线的区别是,IO0 外接低电平,此时,esp01s不能烧录程序,,模块会直接运行已经烧录好的程序。
接线,如下
RX --> TX
TX --> RX
IO0 --> VCC
IO2 --> VCC
GND --> GND
3v3 --> VCC
RST --> VCC
EN --> VCC
注册巴法云账号
搜索巴法云官网,或直接进入 https://cloud.bemfa.com/user/index.html
如下图,点击“微信登录”,扫码直接登录注册,然后直接进入“控制台”
创建主题
登录后,会直接跳转到巴法云云平台的个人控制台,
如下图,选中TCP创客云,输入主题名“light002”,点击新建主题,便可以创建一个名为light002的主题,之后我们就可以对这个主题进行订阅或发布了。主题以002为后缀,表示该主题为灯的类型
接入小度音箱支持介绍
巴法云物联网平台默认接入小度,仅支持以下类型的设备:插座、灯泡、开关、窗帘、风扇、空调
。
用户可以自主选择是否接入小度,根据主题名字判定。
当主题名字后三位是001时为插座设备。
当主题名字后三位是002时为灯泡设备。
当主题名字后三位是003时为风扇设备。
当主题名字后三位是004时为传感器设备。
当主题名字后三位是005时为空调设备。
当主题名字后三位是006时为开关设备。
当主题名字后三位是009时为窗帘设备。
当主题名字为其他时,默认为普通主题节点,不会同步到小度音箱app。
接入小度音响
-
可以参考巴法云官方文档 小度音箱支持
-
小度app点击右上角添加设备按钮,
-
搜索
巴法
-
登录巴法云账号则会自动同步设备
Arduino完整代码
程序烧录后,修改接线,切换至运行模式,通电,正常运行,可有在Arduino IDE上看到返回结果
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
const char* host = "bemfa.com"; // 网络服务器地址
const int httpPort = 8344; // http端口80
// WiFi连接信息
const char* WiFi_SSID = "热点名";
const char* WiFi_Password = "热点密码";
//bemfa 用户信息
String uid = "你的巴法云的uid";
String topic = "设备主题";
//心跳发送频率
int heart_rate = 3000;
int heart_count = 0;
ESP8266WiFiMulti wifiMulti; // 建立ESP8266WiFiMulti对象
WiFiClient client; // 建立WiFi客户端对象,对象名称client
//单片机LED引脚值
const int LED_Pin = 0;// GPOI2 LED
void setup(){
Serial.begin(115200);
//设置LED
pinMode(LED_Pin, OUTPUT);
digitalWrite(LED_Pin, HIGH);
// 设置ESP8266为无线终端模式
WiFi.mode(WIFI_STA);
// 添加 热点名 以及 密码
wifiMulti.addAP(WiFi_SSID, WiFi_Password);
Serial.println("Connecting ...");
// 尝试进行wifi连接,知道连接成功
int i = 0;
while (wifiMulti.run() != WL_CONNECTED) {
delay(1000);
Serial.print(i++); Serial.print(' ');
}
// WiFi连接成功后将通过串口监视器输出连接成功信息
Serial.println("");
Serial.print("Connected to ");
Serial.println(WiFi.SSID()); // WiFi名称
Serial.print("IP address:\t");
Serial.println(WiFi.localIP()); // IP
//连接巴法云
client.connect(host, httpPort);
Serial.print("conneted bamfa!\n");
//订阅主题test
client.print("cmd=1&uid="+uid+"&topic="+topic+"\r\n");
}
void loop(){
// 判断登录状态
if(not client.connected()){
//判断wifi热点是否断开
if (WiFi.status() != WL_CONNECTED){
// 尝试进行wifi连接,知道连接成功
int i = 0;
while (wifiMulti.run() != WL_CONNECTED) {
delay(1000);
Serial.print(i++); Serial.print(' ');
}
}
//连接巴法云
client.connect(host, httpPort);
Serial.print("reconneted bamfa!\n");
//订阅主题test
client.print("cmd=1&uid="+uid+"&topic="+topic+"\r\n");
}
//输出结果
while (client.connected() || client.available()){
if (client.available()){
String line = client.readStringUntil('\n');
Serial.println(line);
//开关控制
if ((line.indexOf("&topic=light002") > 0))
{
if ((line.indexOf("&msg=on") > 0))
{
digitalWrite(LED_Pin, LOW); //打开
Serial.println("on");
}
else if ((line.indexOf("&msg=off") > 0))
{
digitalWrite(LED_Pin, HIGH);//关闭
Serial.println("off");
}
}
}
//定时发送心率
if(heart_count++ >= heart_rate){
//发送心跳
client.print("ping\r\n");
Serial.println("ping");
//计数清零
heart_count = 0;
}
delay(10);
}
}
评论区