本文介绍了香蕉派 CanMV K230D Zero 开发板通过 ADC 实现电压和温度转换,结合 WiFi 和 MQTT 协议实现数据实时上传至 Home Assistant 平台,并进一步结合 LabVIEW 上位机实现演化曲线分析及数据采集的项目设计。
包括 ADC 数据打印、电压获取、温度转换等。
打开 CanMV IDE 软件,新建文件并添加如下代码
from machine import ADC, Pin
import time
adc = ADC(0) # 初始化 ADC
def read_adc():
"""读取ADC原始值、转换为电压和温度"""
raw_value = adc.read_u16()
vol = adc.read_uv() / 1000000 # voltage
temp = (vol - 0.5) * 100 - 7 # temperature
return raw_value, round(vol, 2), round(temp, 2) # 保留2位小数
# 主循环
while True:
raw, vol, temp = read_adc()
print(f"ADC原始值: {raw:4d} | 电压值: {vol}V | 温度值: {temp}℃")
time.sleep(1)
保存代码,连接开发板,运行代码。
打开串行终端,获取 ADC 原始值、转换的电压值以及温度值。

测试 WiFi 连接功能,并使用 ping 实现网络连通性测试。
打开 CanMV IDE 软件,新建文件并添加如下代码
import network
import time
import socket
# WiFi 配置
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 情况等。

在实现 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配置 -----------------
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) # 假设ADC连接到GPIO35(根据实际硬件调整)
def read_sensors():
# 获取ADC电压
adc_value = adc.read_u16() # 12位ADC
voltage = adc.read_uv() / 1000000 # 转换为电压值(V)
temperature = (voltage - 0.5) * 100 - 7 # 转换为温度值(℃)
return round(voltage, 2), temperature
# ----------------- MQTT配置 -----------------
MQTT_SERVER = "192.168.1.121" # MQTT 服务器地址
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():
# 连接WiFi
connect_wifi()
# 连接MQTT
mqtt_client = connect_mqtt()
# 主循环
while True:
try:
# 读取传感器数据
voltage, temperature = read_sensors()
# 构造JSON数据
payload = {
"voltage": voltage,
"temperature": temperature
}
# 发布MQTT消息
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 软件测试数据接收情况;

可见数据每 2 秒更新一次。
使用 Docker 部署 HA 平台,并添加 MQTT 集成和传感器,实现 ADC 温度计和电压表的物联网设计。
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 部署方案详见:Home Assistant .
为了实现 ADC 数据采集,设计了 LabVIEW 上位机,通过 MQTT 协议,自动捕获信息并提取数据,获得演化曲线以及数据保存等。
前面板的设计主要包括发布和订阅两部分,订阅部分包括控制按钮、主题、保存路径等参数配置、数据指针显示、演化曲线等。


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

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