【BPI-CanMV-K230D-Zero开发板体验】Home Assistant 智能 ADC 电压表和温度计的 LabVIEW 数据采集
本文介绍了香蕉派 CanMV K230D Zero 开发板通过 ADC 实现电压和温度转换,结合 WiFi 和 MQTT 协议实现数据实时上传至 Home Assistant 平台,并进一步结合 LabVIEW 上位机实现演化曲线分析及数据采集的项目设计。
项目介绍
- ADC 数据采集:ADC 数据打印、电压获取、温度转换;
- WiFi 连接:实现 WiFi 连接和网络连通性测试;
- MQTT 上传:结合 MQTT 协议,实现 ADC 电压和转换温度数据的上传;
- Home Assistant (HA) 测试:添加 ADC 温度和电压的传感器卡片,实现对应的物联网设计;
- LabVIEW 上位机:自动捕获 JSON 消息,采集、分析和保存数据。
ADC 数据采集
包括 ADC 数据打印、电压获取、温度转换等。
代码
打开 CanMV IDE 软件,新建文件并添加如下代码
from machine import ADC, Pin
import time
adc = ADC(0)
def read_adc():
"""读取ADC原始值、转换为电压和温度"""
raw_value = adc.read_u16()
vol = adc.read_uv() / 1000000
temp = (vol - 0.5) * 100 - 7
return raw_value, round(vol, 2), round(temp, 2)
while True:
raw, vol, temp = read_adc()
print(f"ADC原始值: {raw:4d} | 电压值: {vol}V | 温度值: {temp}℃")
time.sleep(1)
保存代码,连接开发板,运行代码。
效果
打开串行终端,获取 ADC 原始值、转换的电压值以及温度值。

WiFi连接
测试 WiFi 连接功能,并使用 ping 实现网络连通性测试。
代码
打开 CanMV IDE 软件,新建文件并添加如下代码
import network
import time
import socket
WIFI_SSID = "xxx"
WIFI_PASSWORD = "xxx"
def connect_wifi():
wlan = network.WLAN(network.STA_IF)
if not wlan.isconnected():
print("连接WiFi中...")
wlan.connect(WIFI_SSID, WIFI_PASSWORD)
for _ in range(10):
if wlan.isconnected():
break
time.sleep(1)
if wlan.isconnected():
print(f"WiFi连接成功! IP: {wlan.ifconfig()[0]}")
return True
else:
print("WiFi连接失败!")
return False
def ping_test(host, port=80):
try:
ip = socket.getaddrinfo(host, port)[0][4][0]
sock = socket.socket()
sock.settimeout(3)
sock.connect((ip, port))
sock.close()
print(f"Ping {host} ({ip}): 成功")
return True
except Exception as e:
print(f"Ping {host}: 失败({e})")
return False
if connect_wifi():
targets = [
("百度HTTP", "www.baidu.com", 80),
("百度HTTPS", "www.baidu.com", 443),
("Google DNS", "8.8.8.8", 53)
]
for name, host, port in targets:
print(f"\\n测试 {name}...")
ping_test(host, port)
保存代码,连接开发板,运行代码。
效果
打开串行终端,获取 WiFi 连接状态、ping 情况等。

MQTT 上传
在实现 ADC 数据采集和 WiFi 连接的基础上,进一步结合 MQTT 协议,实现 ADC 电压和转换温度数据的上传。
准备工作
考虑到需要通过 MQTT 协议上传 ADC 数据,采用 MQTTClient 库的方案。
将开发板连接电脑,在 此电脑\\CanMV\\sdcard\\libs\\umqtt 路径下添加 simple.py 文件,以便编程时直接调用。
流程图

代码
打开 CanMV IDE 软件,新建文件并添加如下代码
import network
import time
import json
from machine import Pin, ADC
from libs.umqtt.simple import MQTTClient
WIFI_SSID = "xxx"
WIFI_PASSWORD = "xxx"
def connect_wifi():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
print("Connecting to WiFi...")
wlan.connect(WIFI_SSID, WIFI_PASSWORD)
while not wlan.isconnected():
time.sleep(0.5)
print("WiFi Connected:", wlan.ifconfig())
adc = ADC(0)
def read_sensors():
adc_value = adc.read_u16()
voltage = adc.read_uv() / 1000000
temperature = (voltage - 0.5) * 100 - 7
return round(voltage, 2), temperature
MQTT_SERVER = "192.168.1.121"
MQTT_PORT = 1883
MQTT_CLIENT_ID = "bpi-adc-vol-temp"
MQTT_USERNAME = "xxx"
MQTT_PASSWORD = "xxx"
MQTT_TOPIC = "bpi/adc/vol_temp"
def connect_mqtt():
client = MQTTClient(
client_id=MQTT_CLIENT_ID,
server=MQTT_SERVER,
port=MQTT_PORT,
user=MQTT_USERNAME,
password=MQTT_PASSWORD
)
client.connect()
print("Connected to MQTT Server")
return client
def main():
connect_wifi()
mqtt_client = connect_mqtt()
while True:
try:
voltage, temperature = read_sensors()
payload = {
"voltage": voltage,
"temperature": temperature
}
mqtt_client.publish(MQTT_TOPIC, json.dumps(payload))
print("Data sent:", payload)
except Exception as e:
print("Error:", e)
try:
mqtt_client.disconnect()
except:
pass
time.sleep(5)
mqtt_client = connect_mqtt()
time.sleep(2)
if __name__ == "__main__":
main()
保存代码,连接开发板,运行代码。
效果
打开串行终端,获取 WiFi 连接、MQTT 服务器连接、JSON 数据上传状态等。

测试
使用 MQTTX 软件测试数据接收情况;
- 新建连接
- 配置 MQTT Broker 信息,如 ip 地址、MQTT 账户密码等 -
- 添加订阅主题,实现数据监听;

可见数据每 2 秒更新一次。
Home Assistant 测试
使用 Docker 部署 HA 平台,并添加 MQTT 集成和传感器,实现 ADC 温度计和电压表的物联网设计。
- 进入 HA 界面,依次打开设置 - 设备与服务 - 添加集成 - MQTT;
- 输入 MQTT 配置信息,包括 ip 地址、MQTT 账户密码等;
- 打开 HA 目录下的
config/configuration.yaml 文件,添加如下代码
mqtt:
sensor:
- name: "Temperature"
state_topic: "bpi/adc/vol_temp"
suggested_display_precision: 1
unit_of_measurement: "°C"
value_template: "{{ value_json.temperature }}"
- name: "Voltage"
state_topic: "bpi/adc/vol_temp"
suggested_display_precision: 1
unit_of_measurement: "V"
value_template: "{{ value_json.voltage }}"
- 在 HA 概览界面添加温度和电压表传感器卡片即可。

动态效果见顶部视频。
HA 部署方案详见:Home Assistant .
LabVIEW 上位机
为了实现 ADC 数据采集,设计了 LabVIEW 上位机,通过 MQTT 协议,自动捕获信息并提取数据,获得演化曲线以及数据保存等。
前面板
前面板的设计主要包括发布和订阅两部分,订阅部分包括控制按钮、主题、保存路径等参数配置、数据指针显示、演化曲线等。

程序框图

使用方法
- 填写 MQTT 连接信息,包括 IP 地址、用户名、密码、订阅主题等;
- 运行程序,点击
Connect 连接到 EMQX MQTT Broker 服务器,当 subscribe Success绿灯亮起,表明订阅初始化成功;
- 点击
Subscribe 按钮,此时 RX Value 接收到 json 消息,并成功获得温湿度数据;
- 采集完成后,点击
Quit 按钮结束进程。
需安装 VIPM JSONtext 软件库,实现 JSON 字符串转换和数字提取。
数据保存
单次数据采集完成后,程序自动保存数据至指定文件夹,包括日期、时间、温度值、电压值。

动态效果见底部视频。
总结
本文介绍了香蕉派 CanMV K230D Zero 开发板通过 ADC 实现电压和温度转换,结合 WiFi 和 MQTT 协议实现数据实时上传至 Home Assistant 平台,并进一步结合 LabVIEW 上位机实现演化曲线分析及数据采集的项目设计,为该开发板在物联网和工业科研领域的开发和应用提供了参考。