【ADXL357Z高精度3轴加速度传感器模块】HomeAssistant 远程显示——通信测试
本文介绍了 DigiKey 和 EEWorld 共同举办的 你晒单我买单 活动的所选物料 —— ADXL357Z 高精度 3 轴加速度传感器模块 调用 Arduino Library 库函数采集 XYZ 三轴加速度值,结合 ESP8266 无线 WiFi 模块,通过 MQTT 协议远程传输数据至 Home Assistant 智能家居平台的项目设计。
准备工作
- Windows 系统下安装 Docker 容器,以适应不同软件所需环境;
- 安装和部署 EMQX 服务器平台,作为 MQTT Broker 端;
- 安装 Home Assistant 智能家居平台,并获取配置文件
configuration.yaml
的路径;
部署方案详见:开发板通过 MQTT 协议接入 Home Assistant .
硬件连接
采用 IIC 通信方式,将传感器与 Arduino Nano 开发板(主控ATmega328P)连接
ADXL357 | Arduino Nano |
---|---|
SCL (P2 - 2) | SCL (A5) |
SDA (P2 - 6) | SDA (A4) |
VSS (P1 - 5) | GND |
VDD (P1 - 3) | 3V3 |
示意图
流程图
代码
新建 Arduino 工程,根据流程图设计,添加如下代码
#include <Wire.h>
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include "Seeed_adxl357b.h"
// WiFi配置
const char* ssid = "xxx";
const char* password = "xxx";
// MQTT配置(带认证)
const char* mqtt_server = "192.168.1.121"; // 替换为你的MQTT服务器地址
const int mqtt_port = 1883;
const char* mqtt_user = "xxx"; // MQTT用户名
const char* mqtt_pass = "xxx"; // MQTT密码
const char* mqtt_client_id = "ESP8266_ADXL357B"; // ID
const char* mqtt_topic = "home/sensor/ADXL357Z";
WiFiClient espClient;
PubSubClient client(espClient);
Adxl357b adxl357b;
// 校准参数
float offsetX = 0, offsetY = 0, offsetZ = 0;
const int calibration_samples = 50;
unsigned long lastMsgTime = 0;
const long publishInterval = 1000; // 发布间隔1秒
void setup() {
Serial.begin(115200);
//Wire.begin(02,14); // 修改默认 IIC 通信引脚配置
// 初始化传感器
if(adxl357b.begin()) {
Serial.println("[ERROR] ADXL357B初始化失败");
while(1);
}
adxl357b.setAdxlRange(FOURTY_G);
adxl357b.setPowerCtr(0); // 进入测量模式
calibrate_sensor();
setup_wifi();
client.setServer(mqtt_server, mqtt_port);
client.setCallback(mqtt_callback);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
// 定时发布数据
if (millis() - lastMsgTime > publishInterval) {
lastMsgTime = millis();
publish_accel_data();
}
}
void publish_accel_data() {
int32_t rawX, rawY, rawZ;
if(adxl357b.checkDataReady() && !adxl357b.readXYZAxisResultData(rawX, rawY, rawZ)) {
// 转换为g值并应用校准
float accel[3] = {
rawX * 0.0000385 - offsetX, // X轴
rawY * 0.0000385 - offsetY, // Y轴
rawZ * 0.0000385 - offsetZ // Z轴
};
// 构建紧凑型JSON
char json[128];
snprintf(json, sizeof(json),
"{\"x\":%.4f,\"y\":%.4f,\"z\":%.4f,\"unit\":\"g\"}",
accel[0], accel[1], accel[2]);
if (client.publish(mqtt_topic, json)) {
Serial.printf("[MQTT] 发布成功: %s\n", json);
} else {
Serial.println("[ERROR] 发布失败");
}
}
}
void calibrate_sensor() {
Serial.println("开始校准...保持设备水平静止10秒");
int32_t samples[3] = {0};
for(int i=0; i<calibration_samples; i++) {
int32_t x, y, z;
if(adxl357b.checkDataReady()) {
adxl357b.readXYZAxisResultData(x, y, z);
samples[0] += x;
samples[1] += y;
samples[2] += z;
Serial.printf("校准进度 %d/%d\r", i+1, calibration_samples);
}
delay(200);
}
offsetX = samples[0] * 0.0000385 / calibration_samples;
offsetY = samples[1] * 0.0000385 / calibration_samples;
offsetZ = (samples[2] * 0.0000385 / calibration_samples) - 1.0; // 减去1g重力
Serial.printf("\n校准完成\nX偏移:%.6fg\nY偏移:%.6fg\nZ偏移:%.6fg\n",
offsetX, offsetY, offsetZ);
}
void setup_wifi() {
delay(10);
Serial.printf("\n连接WiFi: %s", ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.printf("\nWiFi已连接\nIP地址: %s\n", WiFi.localIP().toString().c_str());
}
void mqtt_callback(char* topic, byte* payload, unsigned int length) {
Serial.printf("收到消息 [%s]: ", topic);
for (unsigned int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();
}
void reconnect() {
while (!client.connected()) {
Serial.print("尝试MQTT连接...");
if (client.connect(mqtt_client_id, mqtt_user, mqtt_pass)) {
Serial.println("已连接");
// 订阅控制主题
client.subscribe("sensors/adxl357b/control");
Serial.println("已订阅控制主题");
} else {
Serial.printf("失败, rc=%d\n", client.state());
Serial.println("10秒后重试...");
delay(10000);
}
}
}
保存代码,编译和上传至开发板,复位运行程序。
效果
包括工程调试、Home Assistant 网页端和 APP 端展示。
工程调试
- 下载并安装 MQTTX 软件;
- 新建连接,自定义名称,输入配置参数(EMQX 服务器 ip 地址、用户名、密码等);
- 添加话题 topic 名称为
home/sensor/ADXL357Z
,启动连接;
总结
本文介绍了 DigiKey 和 EEWorld 共同举办的 你晒单我买单 活动的所选物料 —— ADXL357Z 高精度 3 轴加速度传感器模块 调用 Arduino Library 库函数采集 XYZ 三轴加速度值,结合 ESP8266 无线 WiFi 模块,通过 MQTT 协议远程传输数据至 Home Assistant 智能家居平台的项目设计,展示了该传感器在物联网相关领域的应用前景,为精密设备研发和远程控制等方面的应用提供了参考。