Arduino实现真正的物联网-通过MQTT服务器-两块板子远程通信

本文介绍了如何使用Arduino和MQTT协议实现物联网设备间的远程通信。通过ESP8266模块和MQTT库,配合EMQ服务器,展示了发布和订阅消息的代码示例,并提到了手机调试软件MyMQTT的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

该博客现已搬运到我的个人博客.上
之后我也会在自己的博客上更新一些东西,这里放上文章链接.

我在做竞赛项目的时候,在板子和板子远程交互上做的东西
百度上找到的东西也都是七零八碎的,
同时也希望我的博客能给大家一点微薄的帮助
PS.我也是第一次写博客 用词不当之处还希望大家见谅和指出

准备工作

  1. Arduino ide的准备安装。
  2. ESP8266模块+UNO 或者 NodeMCU和WIFIduino(强烈推荐后两个,我用的是后两个 因为esp8266+板子 我是真没有搞懂)
  3. 搭建自己的MQTT服务器
  4. 准备两个库 PubSubclient 和 esp8266wifi

MQTT服务器的介绍

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。

MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。

而对于Arduino来说——只需要简单的发布消息和接收消息——是再好不过的选择,而且有现成的库文件,也不需要我们再去做很多其他工作。

MQTT服务器的搭建

我在Windows上搭建MQTT服务器的时候 一直遇到一个.dll文件缺失 所以我就转到Ubuntu上搭建服务器了。
个人推荐用EMQ这个软件来搭(管理台界面好看而且有中文)
自己电脑上搭服务器的缺点是,必须在同局域网下——即你的板子你的手机和你的电脑链接的是同一个WIFI——才能链接这个服务器,主要原因是你的电脑不具有公网IP没有办法在公网下访问,如果只是自己学东西建议是在自己的电脑上搭。
如果是要出产品 建议去租阿里的服务器(我是白嫖了朋友一个)

两个库文件

PubSubclient 这个库文件应该是对MQTT支持最完美的库文件
请到该github链接上下载或者官网
github下载链接: link.
官网下载链接: link.
这个库文件的详细说明请见该库文件的API文档
API文档: link.

而我们真正用到的 只是其中的一个示例:如图选中的示例
ESP8266WIFI
该库可在我的github上找到:
下载链接: link.

接下来我会详细的解释这个例子,这个例子实现了最简单的发布信息和接受信息:

/*
基本的ESP8266 MQTT示例

 该草图演示了pubsub库的组合功能
 与ESP8266板/库。
 它连接到MQTT服务器,然后:
   - 每两秒向“outTopic”主题发布“hello world”
   - 订阅“inTopic”主题,打印出任何消息
    它接收。 NB  - 它假设收到的有效载荷是非二进制的字符串
   - 如果主题“inTopic”的第一个字符为1,则打开ESP Led,
    否则关掉它
 如果使用阻止丢失连接,它将重新连接到服务器
 重新连接功能。有关如何使用,请参阅'mqtt_reconnect_nonblocking'示例
 在不阻塞主循环的情况下实现相同的结果。

 要安装ESP8266板,(使用Arduino 1.6.4+):
   - 在“文件 - >首选项 - >其他板卡管理器URL”下添加以下第三方板卡管理器:
      http://arduino.esp8266.com/stable/package_esp8266com_index.json
   - 打开“工具 - >板 - >板管理器”,然后单击ESP8266的安装“
   - 在“工具 - >板”中选择您的ESP8266
这个是我用翻译把顶部注释翻译了
*/

#include <ESP8266WiFi.h>
#include <PubSubClient.h>

const char* ssid = "........";//你要让板子链接的WiFi的名字
const char* password = "........";//该WiFi的密码
const char* mqtt_server = "broker.mqtt-dashboard.com";//你的服务器地址

WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
char msg[50];
int value = 0;

void setup_wifi() {
   
   

  delay(10);
   Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
   
   
    delay(500);
    Serial.print(".");
  }

  randomSeed(micros());

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}//链接WiFi

void callback(char* topic, byte* payload, unsigned int length) {
   
   
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
  for (int i = 0; i < length; i++) {
   
   
    Serial.print((char)payload[i]);
  }//串口打印出收到的信息
  Serial.println
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值