谷谷小师妹 发表于 2023-3-7 00:02:38

30分钟定制数据采集与显示方案——网络篇

30分钟定制数据采集与显示方案——网络篇

前言
作为一个嵌入式软件工程师,数据采集与可视化是一门基本功课。在技术发展日新月异的今天,有很多种方式可以实现以上目标,今天所说的方法,只需花一点时间,就能定制你的采集方案,快速完成原型开发与验证。你的需求可能是这样的:采集温度值,然后电脑上实时显示,必要时还可以保存到本地,如果能实时绘图,那就更好了。上一节介绍了串口传输方式,本节介绍网络传输方式。
上位机选择Serial Stduio
https://serial-studio.github.io/
Feature
[*]开源项目
[*]支持串口、网络和MQTT方式获取数据
[*]易显示、处理与导出你项目中的数据
使用
[*]下载、安装、打开软件
[*]定制通信协议
这里假设一种最简单的方式:/*%1,%2,%3*/,%1,%2,%3为占位符,用实际数据替代。
[*]保存协议为 json 文件
[*]连接网络获取数据
下位机选择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
小结
[*]随着IoT技术日益普及,小型设备具有网络通信的特性也很普遍了。
页: [1]
查看完整版本: 30分钟定制数据采集与显示方案——网络篇