作为一个程序员,想要学习物联网控制,并将学习过程记录下来,方便他人查阅。
- 准备硬件:选择ESP8266 12F,它内置WiFi,适合入门。
- 安装工具:使用Arduino IDE进行代码编写和上传。
- 安装驱动与库:使用提供的一键安装包,简化ESP8266驱动和MQTT库的安装。
- 获取Bmob云服务信息:注册并获取MQTT服务的必要信息。
- 编写与上传代码:配置WiFi和MQTT连接,控制ESP8266内置灯。
- 远程控制灯光:通过Bmob云实现远程开关灯。
首先我们看最终效果
输入on 开灯
输入off 关灯
这是是最终效果的录制视频
https://www.ixigua.com/7403595674341605942?utm_source=iframe_share
准备硬件:选择ESP8266 12F,它内置WiFi,适合入门。
ESP8266-12F 是一个经济实惠的 WiFi 模块,广泛应用于物联网(IoT)开发。它自带 WiFi 功能,支持 2.4GHz 无线网络连接,适合需要无线通信的小型电子项目。模块体积小巧,拥有多个 GPIO 引脚,可轻松集成到各种硬件项目中。由于其低功耗和强大的处理能力,ESP8266-12F 在远程控制、智能家居、传感器网络等领域得到了广泛应用,成为了物联网开发的首选硬件之一。
主要是他便宜,国产,并且最新手友好,他长这样,价格就十几块,网上随便找个店铺即可
下单,我这因为购买了一些其他材料,所有价格需要30多
安装工具:使用Arduino IDE进行代码编写和上传。
这里选择
Arduino IDE
,下载地址:www.arduino.cc/en/software安装驱动与库:使用提供的一键安装包,简化ESP8266驱动和MQTT库的安装。
- 下载安装后,安装esp8266模块
开发工具安装mqtt链接库,由于github 被墙,这里我传个国内代码镜像,封装为bat命令,安装时关闭开发工具
https://link.juejin.cn/?target=https%3A%2F%2Fbmob-cdn-31082.bmobpay.com%2Fiot%2Fesp8266_install.zip
[图片上传失败...(image-72868c-1725876245397)]
我们把代码上次的时候,需要选择我们上传的端口
这样我们就可以把代码烧录到esp8266
获取Bmob云服务信息:注册并获取MQTT服务的必要信息。
登录控制台
[图片上传失败...(image-5d830f-1725876245397)]
左侧IOT栏目,拿到链接参数
编写与上传代码:配置WiFi和MQTT连接,控制ESP8266内置灯。
代码直接复制使用,把里面几个参数跟Bmob后端云一致即可
// 加载WIFI头文件
#include <ESP8266WiFi.h>
// 加载MQTT库文件
#include <PubSubClient.h>
// 你的WIFI名称,需要修改
const char* WIFI_SSID = "WiFi名称";
// 你的WIFI密码,需要修改
const char* WIFI_PASSWORD = "WiFi密码";
// Bmob云的物联网地址
const char* MQTT_SERVER = "broker.codenow.cn";
// Bmob云的物联网端口
const int MQTT_PORT = 1883;
// 灯光引脚
const int LED = 2;
// 用户名,到Bmob云->创建的应用-> IOT -> 连接信息 中获取
#define APPID "603b85d874d1b5ea"
// 密码,到Bmob云->创建的应用-> IOT -> 连接信息 中获取
#define APPPASSWORD "19a66167a0eadaca"
// 你自己定义的设备类型,方便记忆就好,这里的LINE表示灯光的意思
#define TYPE "LINE"
WiFiClient espClient;
PubSubClient client(espClient);
// 打开灯泡
void turnOnLed() {
Serial.println("打开灯光");
digitalWrite(LED, LOW);
}
// 关闭灯泡
void turnOffLed() {
Serial.println("关闭灯光");
digitalWrite(LED, HIGH);
}
// 配置esp8266的WIFI账号和密码
void setup_wifi() {
delay(10);
Serial.println();
Serial.print("Connecting to ");
Serial.println(WIFI_SSID);
// 设置WIFI的账号和密码
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
// 检测WIFI是否联通
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi已连接");
}
// MQTT服务的回调
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print(topic);
Serial.print(" 主题收到消息");
String message = "";
for (int i = 0; i < length; i++) {
message += (char)payload[I];
}
Serial.print(message);
Serial.println();
if (message == "on") {
//如果接收到on字符串,调用开灯方法
turnOnLed();//开灯函数
} else if (message == "off") {
//如果接收到off字符串,调用关灯方法
turnOffLed();
}
message = "";
}
void reconnect() {
while (!client.connected()) {
Serial.print("正在尝试MQTT连接...");
String client_id = "esp8266client";
client_id += String(WiFi.macAddress());
if (client.connect(client_id.c_str(), APPID, APPPASSWORD)) {
Serial.println("正常连接");
//这是你的主题名称
String topic = "devices/" + String(TYPE) + "/" + String(APPID) + "/" + client_id;
client.subscribe(topic.c_str());
} else {
Serial.print("连接异常,rc=");
Serial.print(client.state());
Serial.println(" 5秒后重试");
// 5秒重试
delay(5000);
}
}
}
void setup() {
pinMode(LED, OUTPUT);
// 设置波特率
Serial.begin(115200);
// 配置WIFI并连接上网
setup_wifi();
// 连接MQTT服务
client.setServer(MQTT_SERVER, MQTT_PORT);
// 设置MQTT消息回掉
client.setCallback(callback);
digitalWrite(LED, HIGH);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
}
查看日志
查看串口输出的时候,记得选择波特率位115200(代码中设置的)。
[图片上传失败...(image-5ebe06-1725876245397)]
这样esp8266 就已经链接上mqtt服务。 只要远程下指令,就可以实现开与关
开关核心代码
if (message == "on") {
//如果接收到on字符串,调用开灯方法
turnOnLed();//开灯函数
} else if (message == "off") {
//如果接收到off字符串,调用关灯方法
turnOffLed();
}
远程控制灯光:通过Bmob云实现远程开关灯。
这样就实现了服务器控制远程开关灯, 后面我们把这个开关操作,使用小程序实现。
评论 (0)