從零開始學物聯(lián)網(wǎng)-遠程點亮一盞燈(1)

作為一個程序員,想要學習物聯(lián)網(wǎng)控制,并將學習過程記錄下來,方便他人查閱。

  1. 準備硬件:選擇ESP8266 12F,它內(nèi)置WiFi,適合入門。
  2. 安裝工具:使用Arduino IDE進行代碼編寫和上傳。
  3. 安裝驅動與庫:使用提供的一鍵安裝包,簡化ESP8266驅動和MQTT庫的安裝。
  4. 獲取Bmob云服務信息:注冊并獲取MQTT服務的必要信息。
  5. 編寫與上傳代碼:配置WiFi和MQTT連接,控制ESP8266內(nèi)置燈。
  6. 遠程控制燈光:通過Bmob云實現(xiàn)遠程開關燈。

首先我們看最終效果

輸入on 開燈

輸入off 關燈

這是是最終效果的錄制視頻

https://www.ixigua.com/7403595674341605942?utm_source=iframe_share

  1. 準備硬件:選擇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)上隨便找個店鋪即可

image.png

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

image.png
  1. 安裝工具:使用Arduino IDE進行代碼編寫和上傳。

    這里選擇Arduino IDE,下載地址:www.arduino.cc/en/software

    image.png
  2. 安裝驅動與庫:使用提供的一鍵安裝包,簡化ESP8266驅動和MQTT庫的安裝。

    1. 下載安裝后,安裝esp8266模塊
    image.png
    1. 開發(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)]

    2. 我們把代碼上次的時候,需要選擇我們上傳的端口

      image.png

      這樣我們就可以把代碼燒錄到esp8266

  1. 獲取Bmob云服務信息:注冊并獲取MQTT服務的必要信息。

登錄控制臺

[圖片上傳失敗...(image-5d830f-1725876245397)]

左側IOT欄目,拿到鏈接參數(shù)

image.png
  1. 編寫與上傳代碼:配置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();
}

image.png

查看日志

查看串口輸出的時候,記得選擇波特率位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();
  }

  1. 遠程控制燈光:通過Bmob云實現(xiàn)遠程開關燈。

image.png

image.png

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

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容