从零开始学物联网-远程点亮一盏灯(1)

作为一个程序员,想要学习物联网控制,并将学习过程记录下来,方便他人查阅。

  1. 准备硬件:选择ESP8266 12F,它内置WiFi,适合入门。
  2. 安装工具:使用Arduino IDE进行代码编写和上传。
  3. 安装驱动与库:使用提供的一键安装包,简化ESP8266驱动和MQTT库的安装。
  4. 获取Bmob云服务信息:注册并获取MQTT服务的必要信息。
  5. 编写与上传代码:配置WiFi和MQTT连接,控制ESP8266内置灯。
  6. 远程控制灯光:通过Bmob云实现远程开关灯。

首先我们看最终效果

输入on 开灯

输入off 关灯

这是是最终效果的录制视频

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

  1. 准备硬件:选择ESP8266 12F,它内置WiFi,适合入门。

    ESP8266-12F 是一个经济实惠的 WiFi 模块,广泛应用于物联网(IoT)开发。它自带 WiFi 功能,支持 2.4GHz 无线网络连接,适合需要无线通信的小型电子项目。模块体积小巧,拥有多个 GPIO 引脚,可轻松集成到各种硬件项目中。由于其低功耗和强大的处理能力,ESP8266-12F 在远程控制、智能家居、传感器网络等领域得到了广泛应用,成为了物联网开发的首选硬件之一。

主要是他便宜,国产,并且最新手友好,他长这样,价格就十几块,网上随便找个店铺即可

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. 开发工具安装mqtt链接库,由于github 被墙,这里我传个国内代码镜像,封装为bat命令,安装时关闭开发工具

      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栏目,拿到链接参数

image.png
  1. 编写与上传代码:配置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();
}

image.png

查看日志

查看串口输出的时候,记得选择波特率位115200(代码中设置的)。

[图片上传失败...(image-5ebe06-1725876245397)]

这样esp8266 就已经链接上mqtt服务。 只要远程下指令,就可以实现开与关

开关核心代码

if (message == "on") {
    //如果接收到on字符串,调用开灯方法
    turnOnLed();//开灯函数

  } else if (message == "off") {
    //如果接收到off字符串,调用关灯方法
    turnOffLed();
  }

  1. 远程控制灯光:通过Bmob云实现远程开关灯。

image.png

image.png

这样就实现了服务器控制远程开关灯, 后面我们把这个开关操作,使用小程序实现。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容