【FireBeetle 2 ESP32-C5】无线wifi功能测试及基于mqtt的HA数...
要实现智能家居的HomeAssistant的数据传输,无线wifi是必不可少的,这也是ESP32系列的最突出的特点,接下来我们就测试一下2.4G Wifi的连接能力,ESP的相关例程已经很多,我们用如下测试一下:#include <WiFi.h>
int led = 15;
char ssid[] = "XXX";
char pass[] = "XXX";
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
pinMode(led,OUTPUT);
digitalWrite(led,HIGH);
WiFi.mode(WIFI_STA);// 设置为STA模式
Serial.println("connect to WPA SSID: ");
Serial.println(ssid);
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println("..........");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
// Get WiFi channel and band
uint8_t channel = WiFi.channel();
Serial.print("Channel: ");
Serial.println(channel);
if (channel <= 14) {
Serial.println("Band: 2.4GHz");
} else {
Serial.println("Band: 5GHz");
}
}
void loop() {
// put your main code here, to run repeatedly:
delay(5000);
}
wifi连接失败了:
是不识别吗?不是的,出现这个原因的主要问题是连接的wifi名称设置错误了,我这里是输入错误名称中的一个瞎画线导致的,改了之后就连接成功了:
在管理器也能看到多了一个新的ESP32的设备:
这款C5芯片支持5G连接,这里不需要我们过多的配置,直接连接5G网络就可以,我们尝试wifi 5G链接试一下:
这个时候在路由器管理界面中可以看到ESP的5G接入:
以上是我们对STA模式的功能测试,也就是ESP作为设备连接wifi的能力,目前来看至少对于双频段都是支持的。到这里我们完成了最终目标最基础的两个功能,下面我们将他们串联起来,并通过mqtt把数据送到HA。
这里我们使用树莓派搭载的HAOS作为数据接收方,并通过在HA系统中注册设备和实体作为展示,我们创建传感器实体:
- unique_id: Home_SHT40Tem
name: "SHT40Tem"
state_topic: "HAOS/sensor/sensorSHT40/state"
unit_of_measurement: "°C"
value_template: "{{ value_json.SHT40Tem}}"
- unique_id: Home_SHT40Hum
name: "SHT40Hum"
state_topic: "HAOS/sensor/sensorSHT40/state"
unit_of_measurement: "%"
value_template: "{{ value_json.SHT40Hum}}" 然后就是将wifi和传感器数据采集在加入mqtt的命令生成,就完成我们的智能设备的数据上传了:
#include <WiFi.h>
#include <ArduinoMqttClient.h>
#include <WiFiClient.h>
#include <Arduino_JSON.h>
#include "Adafruit_SHT4x.h"
int led = 15;
Adafruit_SHT4x sht4;
char ssid[] = "XXX";
char pass[] = "XXX";
const char broker[] = "192.168.1.188";
int port = 1883;
const char state_topic1[]= "HAOS/sensor/sensorSHT40/state";
WiFiClient espClient;
MqttClient mqttClient(espClient);
JSONVar dataObj;
const long interval = 1000;
unsigned long previousMillis = 0;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
pinMode(led,OUTPUT);
digitalWrite(led,HIGH);
Wire.begin(9, 10); // GPIO9 为 SDA,GPIO10 为 SCL
Serial.println("I2C initialized");
if (! sht4.begin(&Wire)) {
Serial.println(F("SHT40 sensor not found!"));
while (1) ;
}
else
{
Serial.print(F("SHT40 detected!\t"));
Serial.print(F("Serial number:\t"));
Serial.println(sht4.readSerial(), HEX);
}
sht4.setPrecision(SHT4X_HIGH_PRECISION);
switch (sht4.getPrecision()) {
case SHT4X_HIGH_PRECISION:
Serial.println(F("SHT40 set to High precision"));
break;
case SHT4X_MED_PRECISION:
Serial.println(F("SHT40 set to Medium precision"));
break;
case SHT4X_LOW_PRECISION:
Serial.println(F("SHT40 set to Low precision"));
break;
}
// 6 different heater settings
sht4.setHeater(SHT4X_NO_HEATER);
switch (sht4.getHeater()) {
case SHT4X_NO_HEATER:
Serial.println(F("SHT40 Heater turned OFF"));
break;
case SHT4X_HIGH_HEATER_1S:
Serial.println(F("SHT40 Heater: High heat for 1 second"));
break;
case SHT4X_HIGH_HEATER_100MS:
Serial.println(F("SHT40 Heater: High heat for 0.1 second"));
break;
case SHT4X_MED_HEATER_1S:
Serial.println(F("SHT40 Heater: Medium heat for 1 second"));
break;
case SHT4X_MED_HEATER_100MS:
Serial.println(F("SHT40 Heater: Medium heat for 0.1 second"));
break;
case SHT4X_LOW_HEATER_1S:
Serial.println(F("SHT40 Heater: Low heat for 1 second"));
break;
case SHT4X_LOW_HEATER_100MS:
Serial.println(F("SHT40 Heater: Low heat for 0.1 second"));
break;
}
WiFi.mode(WIFI_STA);// 设置为STA模式
Serial.println("connect to WPA SSID: ");
Serial.println(ssid);
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println("..........");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
// Get WiFi channel and band
uint8_t channel = WiFi.channel();
Serial.print("Channel: ");
Serial.println(channel);
if (channel <= 14) {
Serial.println("Band: 2.4GHz");
} else {
Serial.println("Band: 5GHz");
}
mqttClient.setId("clientId");
mqttClient.setUsernamePassword("admin", "admin");
Serial.print("connect to the MQTT broker: ");
Serial.println(broker);
if (!mqttClient.connect(broker, port)) {
Serial.print("MQTT connection failed! Error code = ");
Serial.println(mqttClient.connectError());
while (1);
}
Serial.println("connected to the MQTT succeed!");
Serial.println();
}
void loop() {
// put your main code here, to run repeatedly:
sensors_event_t humidity, temp;
sht4.getEvent(&humidity, &temp);// populate temp and humidity objects with fresh data
float tem = temp.temperature;
Serial.println("Temp *C = " + String(tem));
float hum = humidity.relative_humidity;
Serial.println("Hum. % = " + String(hum));
dataObj["SHT40Hum"] = hum;
dataObj["SHT40Tem"] = tem;
String jsonString1 = JSON.stringify(dataObj);
mqttClient.beginMessage(state_topic1);
mqttClient.print(jsonString1);
mqttClient.endMessage();
delay(5000);
}
注意对应的库需要下载安装一下,串口打印如下:
HA管理界面可以看到数据上传收到了:
到这里就实现了一个可以给智能家居管理系统HA传输数据的终端了,基于ESP特色的wifi实现。
		页: 
[1]