天天看点

arduino传送字符串json到python解析为字典数据前言python字符转换arduino发送字符串python接收字符串总结

arduino传送字符串json到python解析为字典数据前言python字符转换arduino发送字符串python接收字符串总结

原文链接:https://dsx2016.com/?p=1441

公众号:大师兄2016

前言

前几篇文章仅仅是将获取到的温湿度数据打印在串口,简单的字符串就可以,只需要查看,未实现存储.

为了方便的将

arduino

的数据使用

python

存到数据库中,使用

json

数据是一个不错的方式.

此处设计的为

arduino

传输的为字符串

json,python

将字符串转码为字典后然后进行数据处理.

python字符转换

str转json

# 引入json模块
import json
# 创建字符串json
str = '{"temperature":27,"humidity":85}'
# 解析为字典
j = json.loads(str)
# 打印数据
print(j)
# 打印数据类型
print(type(j))
           

获取到的结果为

{'temperature': 27, 'humidity': 85}
<class 'dict'>
           
arduino传送字符串json到python解析为字典数据前言python字符转换arduino发送字符串python接收字符串总结

arduino发送字符串

arduino

如何拼接字符串

+

运算符允许你把字符串和另一个字符串,常量字符数组,

ASCII

,变量,或者常量字符等组合起来。

// 字符串拼接数字
  stringVal =  stringOne + 123;
​
  // 字符串拼接字符
  stringVal =  stringOne +  "abc";
​
  // 两个字符串变量拼接
  stringVal = stringOne + stringTwo;
           

arduino

把温湿度拼接

参考代码注释

#include <dht11.h>
#define DHT11PIN 4
​
dht11 DHT11;
​
void setup()
{
  Serial.begin(9600);
 
}
​
void loop()
{
  Serial.println();
​
  // 初始化库
  int chk = DHT11.read(DHT11PIN);
​
  // 定义温度变量名
  String  temperature = "\"temperature\":";
  // 获取温度
  int temperatureNum=(float)DHT11.temperature;
  
  // 定义湿度变量名
  String  humidity = "\"humidity\":";
  // 获取湿度
  int humidityNum=(float)DHT11.humidity;
  
  // 拼接字符串json
  String dataRes="{"+temperature+temperatureNum+","+humidity+humidityNum+"}";
  
  // 打印到串口
  Serial.print(dataRes);
​
  // 延时2s执行
  delay(2000);
​
}
           

python接收字符串

此处使用

usb

串口接收数据

注意,

python

接收到的为

bytes

字节符

b'{"temperature":28,"humidity":78}'
           

bytes

str

方式

# 第一种
str(b'123', encoding='utf-8')
# 第二种
bytes.decode(b'123')
           

python

处理

arduino

传来的温湿度数据

参考代码注释

# 引入串口库(注意是serial,不是pyserial)
import serial
# 引入json库
import json
​
# 设置端口变量和值
serialPosrt = "COM3"
# 设置波特率变量和值
baudRate = 9600
# 设置超时时间,单位为s
timeout = 0.5
# 接受串口数据
ser = serial.Serial(serialPosrt, baudRate, timeout=timeout)
​
# 循环获取数据(条件始终为真)
while 1:
    # 读取接收到的数据的第一行
    strData = ser.readline()
    # 把拿到的数据转为字符串(串口接收到的数据为bytes字符串类型,需要转码字符串类型)
    strJson = str(strData, encoding='utf-8')
    # 如果有数据,则进行json转换
    if strJson:
        # 只有当检测到字符串中含有温湿度字符名时才进行json转码,其他的字符串内容不作操作
        if "temperature" in strJson:
            print("当前接受到的数据位->", strJson)
            # 字符串转为json(每个字符串变量名必须为双引号包括,而不是单引号)
            jsonData = json.loads(strJson)
            print("转码成功,当前类型为->", type(jsonData))
    else:
        print("当前接收到的数据为空")
​
           
arduino传送字符串json到python解析为字典数据前言python字符转换arduino发送字符串python接收字符串总结

总结

本文描述了数据通信的数据预处理和数据转码

python

期望接收

json

数据,而不是无序的字符串流

  • arduino

    的数据设置为字符串

    json

    格式(

    C/C++

    )
  • python

    将获取到的

    bytes

    字节符转为字符串(

    python

    )
  • python

    将字符串

    str

    转为

    json

    (字典)(

    python

    )

下期内容

  • 使用

    sqlite

    等数据库存储

    arduino

    的传感器数据

END.