[作品提交] Follow me 第二季第2期进阶任务MQTT平台HA任务

meiyao   2024-9-29 00:07 楼主

要将Arduino UNO R4 WiFi通过Wi-Fi和MQTT协议接入到开源的智能家居平台HA(HomeAssistant),按照以下步骤操作:

 

一、准备阶段

MQTT服务器:EMQX或Mosquitto,可以选择安装一个MQTT服务器,或者在云服务上使用一个现有的MQTT服务。

 

二、配置MQTT服务器

配置MQTT服务器:

根据MQTT服务器的文档,配置必要的参数,。

记录MQTT服务器的地址、端口和认证信息(用户名和密码)。其实这个可以忽略。

MQTT服务器配置:

62d80d1307c0f977f7d6e3affe630be.jpg

 

三、编写Arduino代码

连接Wi-Fi:

在Arduino代码中,添加Wi-Fi连接逻辑,确保Arduino UNO R4 WiFi能够连接到你的Wi-Fi网络。

配置MQTT客户端:

使用Arduino的MQTT库(PubSubClient)来配置MQTT客户端。

设置MQTT服务器的地址、端口、用户名和密码(如果MQTT服务器需要认证)。

编写消息发布和订阅逻辑:

根据你的需求,编写代码来发布消息到MQTT服务器或订阅特定的主题并处理接收到的消息。

 

设定WIFI和密码
char ssid[] = "CMCC-qM7y";        
char pass[] = "15074219167";  
// 引入必要的库  
#include <ArduinoMqttClient.h>  // 注意:这个库可能不是标准的Arduino库,需要确认其来源和兼容性  
#include <WiFiS3.h>             // 这个库可能也不是标准的,通常我们使用<WiFi.h>  
#include <WiFiClient.h>         // 用于创建WiFi客户端对象,与MQTT服务器通信  
  
// WiFi网络的SSID和密码  
char ssid[] = "CMCC-qM7y";          
char pass[] = "15074219167";    
  
// WiFi连接状态  
int status = WL_IDLE_STATUS;     
  
// MQTT代理的IP地址和端口号  
const char broker[] = "192.168.1.113";  
int        port     = 1883;  
// 要发布的MQTT主题  
const char topic[]  = "/aht10/test";  
  
// 创建WiFi客户端和MQTT客户端对象  
WiFiClient wifiClient;  
MqttClient mqttClient(wifiClient);  // 注意:MqttClient类的构造函数可能需要根据实际库进行调整  
  
void setup() {  
  // 初始化串口通信,用于调试  
  Serial.begin(9600);  
  // 等待串口连接(仅对某些开发板必要)  
  while (!Serial) {  
    // 空循环,等待串口准备就绪  
  }  
  
  // 检查WiFi模块是否存在  
  if (WiFi.status() == WL_NO_MODULE) {  
    Serial.println("WiFi模块通信失败!");  
    // 如果WiFi模块不存在,则停止执行  
    while (true);  
  }  
  
  // 检查WiFi固件版本(这个步骤可能不是必需的)  
  String fv = WiFi.firmwareVersion();  
  if (fv < WIFI_FIRMWARE_LATEST_VERSION) {  // 注意:WIFI_FIRMWARE_LATEST_VERSION可能需要定义或根据实际情况调整  
    Serial.println("请升级固件!");  
  }  
  
  // 尝试连接到WiFi网络  
  while (status != WL_CONNECTED) {  
    Serial.print("正在尝试连接到WPA SSID: ");  
    Serial.println(ssid);  
    status = WiFi.begin(ssid, pass);  // 开始连接到指定的SSID和密码  
    delay(10000);  // 等待10秒以尝试连接  
  }  
  
  // 打印当前连接的网络信息  
  Serial.print("您已连接到网络");  
  printCurrentNet();  
  printWifiData();  
  
  // 尝试连接到MQTT代理  
  if (!mqttClient.connect(broker, port)) {  
    Serial.print("MQTT连接失败!错误代码 = ");  
    Serial.println(mqttClient.connectError());  // 打印连接错误的详细信息  
    // 如果连接失败,则停止执行  
    while (1);  
  }  
  Serial.println("您已连接到MQTT");  
}  
  
// 打印当前网络的信息  
void printCurrentNet() {  
  // 打印连接的SSID  
  Serial.print("SSID: ");  
  Serial.println(WiFi.SSID());  
  
  // 打印路由器的MAC地址  
  byte bssid[6];  
  WiFi.BSSID(bssid);  
  Serial.print("BSSID: ");  
  printMacAddress(bssid);  
  
  // 打印接收到的信号强度  
  long rssi = WiFi.RSSI();  
  Serial.print("信号强度 (RSSI):");  
  Serial.println(rssi);  
  
  // 打印加密类型  
  byte encryption = WiFi.encryptionType();  
  Serial.print("加密类型:");  
  Serial.println(encryption, HEX);  // 以十六进制格式打印  
  Serial.println();  
}  
  
// 打印MAC地址的函数  
void printMacAddress(byte mac[]) {  
  for (int i = 0; i < 6; i++) {  
    if (i > 0) {  
      Serial.print(":");  // 在MAC地址的每个字节之间打印冒号  
    }  
    // 如果MAC地址的某个字节小于16,则在前面打印0  
    if (mac[i] < 16) {  
      Serial.print("0");  
    }  
    Serial.print(mac[i], HEX);  // 以十六进制格式打印MAC地址的每个字节  
  }  
  Serial.println();  
}  
  
// 打印WiFi数据(IP地址和MAC地址)  
void printWifiData() {  
  // 打印开发板的IP地址  
  IPAddress ip = WiFi.localIP();  
  Serial.print("IP 地址: ");  
  Serial.println(ip);  
  
  // 打印开发板的MAC地址  
  byte mac[6];  
  WiFi.macAddress(mac);  
  Serial.print("MAC 地址: ");  
  printMacAddress(mac);  
}  
  
// 主循环  
void loop() {  
  // 开始一个新的MQTT消息  
  mqttClient.beginMessage(topic);  
  // 向消息中添加内容  
  mqttClient.print("Hello EEworld and Digikey!");  
  // 结束并发送消息  
  mqttClient.endMessage();  
  // 等待500毫秒,然后重复发送  
  delay(500);  
}

 

四、测试与调试

上传Arduino代码:

将编写好的Arduino代码上传到Arduino UNO R4 WiFi开发板。

测试连接:

检查Arduino是否成功连接到Wi-Fi和MQTT服务器。

在Home Assistant中检查是否成功接收到了Arduino发布的MQTT消息。

 

 

五、输出结果

image.png  

总结:

如何将Arduino UNO R4 WiFi通过Wi-Fi和MQTT协议接入到开源智能家居平台Home Assistant。需要准备一个MQTT服务器,EMQX或Mosquitto,并配置好必要的参数。在Arduino代码中添加Wi-Fi连接逻辑,使用PubSubClient库配置MQTT客户端,并设置服务器的地址、端口及认证信息。编写代码来发布消息到MQTT服务器或订阅特定的主题。在此过程中,需要注意库的选择和兼容性,以及WiFi和MQTT连接的错误处理。完成代码编写后,将其上传到Arduino开发板,并测试连接是否成功。在Home Assistant中检查是否成功接收到了Arduino发布的MQTT消息。整个流程涉及硬件连接、软件配置和代码编写等多个方面,需要仔细操作以确保成功接入Home Assistant平台。通过本文的指导,读者可以掌握将Arduino设备接入智能家居系统的方法,为打造更加智能化的家居环境提供技术支持。

 

本帖最后由 meiyao 于 2024-10-4 00:02 编辑

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复