30分钟定制数据采集与显示方案——网络篇
前言
作为一个嵌入式软件工程师,数据采集与可视化是一门基本功课。 在技术发展日新月异的今天,有很多种方式可以实现以上目标,今天所说的方法,只需花一点时间,就能定制你的采集方案,快速完成原型开发与验证。 你的需求可能是这样的:采集温度值,然后电脑上实时显示,必要时还可以保存到本地,如果能实时绘图,那就更好了。 上一节介绍了串口传输方式,本节介绍网络传输方式。
上位机选择Serial Stduio
https://serial-studio.github.io/
Feature开源项目 支持串口、网络和MQTT方式获取数据 易显示、处理与导出你项目中的数据
使用这里假设一种最简单的方式:/*%1,%2,%3*/,%1,%2,%3为占位符,用实际数据替代。 下位机选择Arduino (需使用 Sheild 实现网络通信)或者 ESP32
Feature使用有多种方法可以模拟设备上传数据,比如说使用一些串口/网络调试工具或助手。
网络通信用起来挺方便的,建立 wifi 连接后,使用 socket 编程即可。
按照上面定义的通信协议编写代码。 这里使用 CircuitPython (基于MicroPython)固件编写App。 import time
import wifi
import socketpool
from secrets import secrets # hold your AP name and password
print("Connecting to a AP ..") # connect to wifi
wifi.radio.connect(secrets["ssid"], secrets["password"])
pool = socketpool.SocketPool(wifi.radio)
print("Connected! my IP: {}".format(wifi.radio.ipv4_address))
# make a native socket to creat a UDP Server
sock_udp = pool.socket(pool.AF_INET, pool.SOCK_DGRAM) # SOCK_STREAM, SOCK_RAW
# UDP Server (Host): name, and port
udpHostName = str(wifi.radio.ipv4_address)
udpHostPort = 1688
print("Creat a UDP Server")
sock_udp.settimeout( None ) # timeout must be set into None!
sock_udp.bind( (udpHostName, udpHostPort) )
a=1
b=2
c=3
while True:
sock_udp.sendto("/*"+str(a)+','+str(b)+','+str(c)+'*/', ('192.168.0.107', 1200) )
time.sleep(1)
a = a+1
b = b+2
c = c+3
终端设置终端数据左边为 hex 格式,右边为 ASCII 格式。
终端 GUI
小结 |