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

v2-afa2e002000eaded77099020c30dc4a9_1440w.jpg?source=172ae18b

v2-6ea57e0260672a3f11f0ef1f7118c64c_b.jpg
原文链接: https:// dsx2016.com/? p=1441
公众号:大师兄2016

前言

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

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

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

python字符转换

str转json

[dsx_def_highlightjs code=code]

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

[/dsx_def_highlightjs]

获取到的结果为

{'temperature': 27, 'humidity': 85}
<class 'dict'>

v2-e06b097fb075324983030921c9dbe3a2_b.jpg

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

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

v2-61da5de27c1ff64da49597ea17d2f65f_b.jpg

总结

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

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

  • arduino的数据设置为字符串json格式(C/C++)
  • python将获取到的bytes字节符转为字符串(python)
  • python将字符串str转为json(字典)(python)

下期内容

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

END.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值