使用digispark打造简单voc在线监测仪-PC端
在设备端我们引用了digiusb向PC机传输数据,对应PC端使用libusb与设备进行通信。同时我们将读取到的数据上传至第三方平台,这样完成数据的远程监控和查看。为简单起见,本程序采用控制台的方式进行操作,程序界面如下图所示:
图 程序运行界面
1.发现设备
首先设置Digispark的VID和PID,根据官网信息可知:
1 |
之后是通过libusb的通过usb_find_busses、usb_find_devices等函数获取系统所有的usb设备,代码如下:
1 | struct usb_dev_handle* p_handle = NULL; |
循环比较PID和VID,即可找到已连接的Digispark设备,代码如下:
1 | // Check to see if each USB device matches the DigiSpark Vendor and Product IDs |
2.硬件与设备数据传输
获取usb_dev_handle后,即可通过usb_control_msg函数读取数据。由于我们在设备端定义了将读取到的数据(int16类型)分两次以char的类型传输,简单起见,同样在PC端定义一个union体与之对应即可。读取设传输数据代码如下:
1 | typedef union |
2.上传Yeelink
本例选择将数据上传至Yeelink平台,协议采用HTTP POST方式推送数据,协议内容如下:
1 | POST /v1.0/device/YOU DEVICE ID/sensor/YOUR SENSOR ID/datapoints HTTP/1.1 |
直接使用winsock上传数据,关键代码如下:
1 | int upload_data_yeelink(char* apikey, char* deviceid, char* sensorid,int value) |
至此PC端程序完成,完整项目代码可在coding.net下载。
补充:Yeelink网站好像经常不稳定,想截图网站打不开了。