作為一個程序員,想要學習物聯(lián)網(wǎng)控制,并將學習過程記錄下來,方便他人查閱。
- 準備硬件:選擇ESP8266 12F,它內(nèi)置WiFi,適合入門。
- 安裝工具:使用Arduino IDE進行代碼編寫和上傳。
- 安裝驅動與庫:使用提供的一鍵安裝包,簡化ESP8266驅動和MQTT庫的安裝。
- 獲取Bmob云服務信息:注冊并獲取MQTT服務的必要信息。
- 編寫與上傳代碼:配置WiFi和MQTT連接,控制ESP8266內(nèi)置燈。
- 遠程控制燈光:通過Bmob云實現(xiàn)遠程開關燈。
首先我們看最終效果
輸入on 開燈
輸入off 關燈
這是是最終效果的錄制視頻
https://www.ixigua.com/7403595674341605942?utm_source=iframe_share
-
準備硬件:選擇ESP8266 12F,它內(nèi)置WiFi,適合入門。
ESP8266-12F 是一個經(jīng)濟實惠的 WiFi 模塊,廣泛應用于物聯(lián)網(wǎng)(IoT)開發(fā)。它自帶 WiFi 功能,支持 2.4GHz 無線網(wǎng)絡連接,適合需要無線通信的小型電子項目。模塊體積小巧,擁有多個 GPIO 引腳,可輕松集成到各種硬件項目中。由于其低功耗和強大的處理能力,ESP8266-12F 在遠程控制、智能家居、傳感器網(wǎng)絡等領域得到了廣泛應用,成為了物聯(lián)網(wǎng)開發(fā)的首選硬件之一。
主要是他便宜,國產(chǎn),并且最新手友好,他長這樣,價格就十幾塊,網(wǎng)上隨便找個店鋪即可

下單,我這因為購買了一些其他材料,所有價格需要30多

-
安裝工具:使用Arduino IDE進行代碼編寫和上傳。
這里選擇
Arduino IDE,下載地址:www.arduino.cc/en/softwareimage.png -
安裝驅動與庫:使用提供的一鍵安裝包,簡化ESP8266驅動和MQTT庫的安裝。
- 下載安裝后,安裝esp8266模塊
image.png-
開發(fā)工具安裝mqtt鏈接庫,由于github 被墻,這里我傳個國內(nèi)代碼鏡像,封裝為bat命令,安裝時關閉開發(fā)工具
https://link.juejin.cn/?target=https%3A%2F%2Fbmob-cdn-31082.bmobpay.com%2Fiot%2Fesp8266_install.zip
[圖片上傳失敗...(image-72868c-1725876245397)]
-
我們把代碼上次的時候,需要選擇我們上傳的端口
image.png這樣我們就可以把代碼燒錄到esp8266
-
獲取Bmob云服務信息:注冊并獲取MQTT服務的必要信息。
登錄控制臺
[圖片上傳失敗...(image-5d830f-1725876245397)]
左側IOT欄目,拿到鏈接參數(shù)

-
編寫與上傳代碼:配置WiFi和MQTT連接,控制ESP8266內(nèi)置燈。
代碼直接復制使用,把里面幾個參數(shù)跟Bmob后端云一致即可
// 加載WIFI頭文件
#include <ESP8266WiFi.h>
// 加載MQTT庫文件
#include <PubSubClient.h>
// 你的WIFI名稱,需要修改
const char* WIFI_SSID = "WiFi名稱";
// 你的WIFI密碼,需要修改
const char* WIFI_PASSWORD = "WiFi密碼";
// Bmob云的物聯(lián)網(wǎng)地址
const char* MQTT_SERVER = "broker.codenow.cn";
// Bmob云的物聯(lián)網(wǎng)端口
const int MQTT_PORT = 1883;
// 燈光引腳
const int LED = 2;
// 用戶名,到Bmob云->創(chuàng)建的應用-> IOT -> 連接信息 中獲取
#define APPID "603b85d874d1b5ea"
// 密碼,到Bmob云->創(chuàng)建的應用-> 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是否聯(lián)通
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi已連接");
}
// MQTT服務的回調(diào)
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字符串,調(diào)用開燈方法
turnOnLed();//開燈函數(shù)
} else if (message == "off") {
//如果接收到off字符串,調(diào)用關燈方法
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并連接上網(wǎng)
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 就已經(jīng)鏈接上mqtt服務。 只要遠程下指令,就可以實現(xiàn)開與關
開關核心代碼
if (message == "on") {
//如果接收到on字符串,調(diào)用開燈方法
turnOnLed();//開燈函數(shù)
} else if (message == "off") {
//如果接收到off字符串,調(diào)用關燈方法
turnOffLed();
}
-
遠程控制燈光:通過Bmob云實現(xiàn)遠程開關燈。


這樣就實現(xiàn)了服務器控制遠程開關燈, 后面我們把這個開關操作,使用小程序實現(xiàn)。


