9600波特率每秒传送多少字节_arduino传送字符串json到python解析为字典数据

24ddf8fe8cc1bb0a5d8461795449f332.png

NO.1前言

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

为了方便的将arduino的数据使用python存到数据库中,使用json数据是一个不错的方式.

此处设计的为arduino传输的为字符串json,python将字符串转码为字典后然后进行数据处理.

NO.2python字符转换

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'>

fb160f18b199c73741c6e61af409572a.png

NO.3arduino发送字符串

arduino如何拼接字符串

+运算符允许你把字符串和另一个字符串,常量字符数组,ASCII,变量,或者常量字符等组合起来。

  // 字符串拼接数字
stringVal = stringOne + 123;

// 字符串拼接字符
stringVal = stringOne + "abc";

// 两个字符串变量拼接
stringVal = stringOne + stringTwo;

arduino把温湿度拼接

参考代码注释

#include 
#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);

}
NO.4python接收字符串

此处使用usb串口接收数据

注意,python接收到的为bytes字节符

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

bytesstr方式

# 第一种
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("当前接收到的数据为空")

60f8c40670c7d1c2370eff4d74527806.png

NO.5总结

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

python期望接收json数据,而不是无序的字符串流

  • arduino的数据设置为字符串json格式(C/C++)

  • python将获取到的bytes字节符转为字符串(python)

  • python将字符串str转为json(字典)(python)

下期内容

  • 使用sqlite等数据库存储arduino的传感器数据

END.

你还可以阅读以下文章

使用python实现win10系统和arduino usb串口通信

使用DHT11和Arduino获取房间中的温度和湿度数据

0b21fc501824f36132b4b3b4ebb41699.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值