精华内容
下载资源
问答
  • Mixly图形化编程的JSON数据收发

    千次阅读 2018-08-30 16:21:25
    在传统的单片机应用中,两个单片机串口通信,都是自己定义一些帧,包括帧头,...我推荐使用串口传输JSON字符串! 优点:不需要了解底层的事情,比如: 不考虑大端小端 不考虑数据的byte转换 支持任意长的int,...

    在传统的单片机应用中,两个单片机串口通信,都是自己定义一些帧,包括帧头,数据帧,校验帧,帧尾。图中是飞控MavLink的协议。
    这里写图片描述
    这种方式,稳定,高效。缺点也很明显:开发难度稍大,需要自己制定协议,编码解码需要手动编写。如果想快速尝试两个单片机通信的。我推荐使用串口传输JSON字符串!
    优点:不需要了解底层的事情,比如:

    • 不考虑大端小端
    • 不考虑数据的byte转换
    • 支持任意长的int,float
    • 简单易懂,容易开发。

    **缺点:**效率稍低。JSON的编码和解码会占用CPU的处理时间。
    JSON(JavaScript Object Notation,JS 对象简谱)是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

    JSON 语法规则
    在JS语言中,一切都是对象。因此,任何支持的类型都可以通过JSON来表示,例如字符串、数字、对象、数组等。但是对象和数组是比较特殊且常用的两种类型:

    • 对象表示为键值对
    • 数据由逗号分隔
    • 花括号保存对象
    • 方括号保存数组
    • JSON 键/值对

    JSON键值对是用来保存JS对象的一种方式,和JS对象的写法也大同小异,键/值对组合中的键名写在前面并用双引号 “” 包裹,使用冒号 : 分隔,然后紧接着值:
    {“firstName”: “Json”}
    这很容易理解,等价于这条JavaScript语句:
    {firstName : “Json”}

    Mixly的JSON相关模块
    目前在Mixly0.998版本高级视图的文本类里增加了8个JSON的相关模块,在当前版本中没有JSON的数组处理模块,看看以后是否需要增加,一般情况下的使用,现有的8个模块已可满足了。
    这里写图片描述

    JSON数据的发送例程
    例程如下图所示。
    这里写图片描述

    1. 首先初始化串口;
      这里写图片描述
    2. 定义JSON发送缓冲区的大小;
      这里写图片描述
    3. 因为我们是要发送JSON,所以我们要创建JSON对象;
      这里写图片描述
    4. 定义我们要发送的一系列“键 / 值”对;
      这里写图片描述
    5. 最后就是发送JSON数据了,打印有两种方式:
      a) 打印成一行
      这里写图片描述
      如:{“a”:“dgd3”,“b”:2,“c”:“z3”,“d”:“n”,“e”:7.2136}
      b) 美观打印
      这里写图片描述
      如:
      {
      “a”: “a111”,
      “b”: 2,
      “c”: “c333”,
      “d”: “d444”,
      “e”: 7.23
      }
      是不是发送JSON很简单!

    JSON数据的接收解析例程
    JSON数据接收解析程序如下图所示。
    这里写图片描述

    1. 首先定义一组变量用于保存我们要接收的JSON数据,注意定义的变量数据类型与名称要与实际接收的数据一致;
      这里写图片描述
    2. 初始化串口;
      这里写图片描述
    3. 判断串口是否有可读的数据;
      这里写图片描述
    4. 增加一个等待时间,确保数据接收完整;
      这里写图片描述
    5. 读JSON数据;
      这里写图片描述
    6. 定义JSON缓冲区大小;
      这里写图片描述
    7. 解析JSON对象;
      这里写图片描述
    8. 分离析取各变量值,注意此处定义的变量类型要与第一步所定义的一致;
      这里写图片描述
    9. 将解析结果打印输出;
      这里写图片描述
    10. 运行测试。
      发送测试数据:{“a”:“dgd3”,“b”:2,“c”:“z3”,“d”:“n”,“e”:7.2136}
      解析结果:
      a = dgd3
      b = 2
      c = z3
      d = n
      e = 7.21
    展开全文
  • 为了方便的将arduino的数据使用python存到数据库中,使用json数据是一个不错的方式.此处设计的为arduino传输的为字符串json,python将字符串转码为字典后然后进行数据处理.NO.2python字符转换str转json# 引入json模块...

    121a52a13d1596fe507ee652d37422f8.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'>

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

    7cfac45d2bb75fa54e6737b6cf097f6c.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获取房间中的温度和湿度数据

    6ba8067da086caf68da90dc27ada43ca.png

    展开全文
  • 为了方便的将arduino的数据使用python存到数据库中,使用json数据是一个不错的方式. 此处设计的为arduino传输的为字符串json,python将字符串转码为字典后然后进行数据处理. python字符转换 str转json # 引入json...

    arduino

    原文链接: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

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

     

    arduino

    总结

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

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

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

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

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

    下期内容

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

    END.

    展开全文
  • 为了方便的将arduino的数据使用python存到数据库中,使用json数据是一个不错的方式.此处设计的为arduino传输的为字符串json,python将字符串转码为字典后然后进行数据处理.NO.2python字符转换str转json# 引入json模块...

    6313063d71460ca128e1c43d256d55b2.png

    NO.1前言

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

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

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

    NO.2python字符转换

    str转json

    # 引入json模块

    获取到的结果为

    {'temperature': 27, 'humidity': 85}

    7e4d09168f6dfa9c2e8b00ad72f8e85a.png

    NO.3arduino发送字符串

    arduino如何拼接字符串

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

      // 字符串拼接数字

    arduino把温湿度拼接

    参考代码注释

    #include 
    NO.4python接收字符串

    此处使用usb串口接收数据

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

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

    bytesstr方式

    # 第一种

    python处理arduino传来的温湿度数据

    参考代码注释

    # 引入串口库(注意是serial,不是pyserial)

    ae65cc92f033cb4e6b87078f677a238f.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获取房间中的温度和湿度数据

    544c9f4c39b8ec0431f471e3aa76c5f4.png

    展开全文
  • 为了方便的将arduino的数据使用python存到数据库中,使用json数据是一个不错的方式.此处设计的为arduino传输的为字符串json,python将字符串转码为字典后然后进行数据处理.NO.2python字符转换str转json# 引入json模块...
  • 官方文档参考 协议文档(在旧版里面) 用网络串口助手向平台发数据 onenet各平台地址 JSON格式串识别 最终效果:
  • 关于JQUery.parseJSON()函数的知识札记

    千次阅读 2016-09-20 14:34:50
    JSON数据也许大家都很陌生,而对我来讲属于半成品,由于项目问题,做web虽然用的是JSON数据格式传输,但是关于解析这一块还真不知道该注意什么,更不知道它是如何解析的,由于最近要把串口通信协议与此一致,所以,...
  • 之前几篇总结了文件、网络和串口操作等,这些功能或多或少都与IO操作有关,你可能已经...JSON数据格式 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。JSON采用完全独立于语言的文本格式,这些特...
  • JSON数据也许大家都很陌生,而对我来讲属于半成品,由于项目问题,做web虽然用的是JSON数据格式传输,但是关于解析这一块还真不知道该注意什么,更不知道它是如何解析的,由于最近要把串口通信协议与此一致,所以,...
  • C语言简单数据解析

    2021-03-10 12:05:42
    ​ 在嵌入式开发中通过串口传输数据通常使用JSON解析,虽然JSON十分强大,但JSON耗费资源太多,数据的打包和解析都比较麻烦。有时我们只是传输一些简单的数据,没必要引入JSON。 ​ 下面我将介绍一种简单的数据...
  • 1. 基于.net开发, 适用于Windows系统, 是... 传输协议格式包括数据流、ASCLL、XML、JSON、Modbus等; 5. 兼容西门子、GE等PLC, 以及研华等采集板卡; 6. 兼容MySQL、SQLServer、Oracle等主流数据库存储. 397949992@qq.com
  • 一款支持mqtt协议的数据网关

    千次阅读 2017-12-05 13:52:26
    内嵌Modbus、DLT645、CJ/T188等数据采集驱动,完全兼容了MQTT 3.1,linux、安卓系统,可二次快速开发,提供1个RS-485串口,1个10/100 Mbps以太网口,网关与云平台采用即时通讯协议MQTT传输数据,为保证报文传输安全...
  • 完全兼容了MQTT 3.1,linux、安卓系统,提供1个RS-485串口,1个10/100 Mbps以太网口,网关与云平台采用即时通讯协议MQTT传输数据,为保证报文传输安全,可以采用SSL加密。报文协议格式为JSON。导轨安装! 已接入阿里...
  • 内嵌Modbus、西门子、三菱、欧姆龙、台达、施耐德、汇川、海为、迅捷等PLC数据采集驱动,完全兼容了MQTT 3.1,linux、安卓系统,提供2个串口,5个10/100 Mbps以太网口,网关与云平台采用即时通讯协议MQTT传输数据,...
  • Apache Mina Server 是一个网络通信应用框架 基于 TCP/IP、UDP/IP协议栈的通信框架 支持串口和虚拟机内部的...本实例演示了编码、解码、支持json数据发送和接收,数据格式:{命令长度4字节,命令,数据长度4字节,数据}
  • Android天气APP

    2017-04-08 10:50:46
    基于Android的天气APP 前言 ... 多知天气,主要是给大家学习一下。 项目主要是12月23日开始建立,春节半个多月回家了,就没有写了。三月初完成了整个项目。耗时近两个月。平时在公司也就做点测试的... 蓝牙串口传输温度
  • libutp:uTorrent传输协议库。 化学 化学,地球化学,生物化学 d-SEAMS:具有Nix的C++和Lua实现的分子动力学轨道分析引擎,它是分子模拟的递延结构分析的首字母缩写。 gromacs:传递消息的并行分子动力学实现。...
  • 数据源支持模拟数据(默认)、数据库采集、串口通信(需定制)、网络通信(需定制)、网络请求等,可自由设定每个子界面的采集间隔即数据刷新频率。 采用纯QWidget编写,亲测Qt4.6到Qt5.15任意版本,理论上支持后续...
  • java开源包1

    千次下载 热门讨论 2013-06-28 09:14:34
    Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输数据压缩、颜色转换、键盘鼠标事件转换等等。 最短路径算法实现 k-shortest-paths 这是一个实现了 Yen 的排名算法的无环路径的项目 ...
  • java开源包12

    热门讨论 2013-06-28 10:14:45
    Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输数据压缩、颜色转换、键盘鼠标事件转换等等。 最短路径算法实现 k-shortest-paths 这是一个实现了 Yen 的排名算法的无环路径的项目 ...
  • Java资源包01

    2016-08-31 09:16:25
    Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输数据压缩、颜色转换、键盘鼠标事件转换等等。 最短路径算法实现 k-shortest-paths 这是一个实现了 Yen 的排名算法的无环路径的项目 ...
  • java开源包101

    2016-07-13 10:11:08
    Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输数据压缩、颜色转换、键盘鼠标事件转换等等。 最短路径算法实现 k-shortest-paths 这是一个实现了 Yen 的排名算法的无环路径的项目 ...
  • java开源包11

    热门讨论 2013-06-28 10:10:38
    Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输数据压缩、颜色转换、键盘鼠标事件转换等等。 最短路径算法实现 k-shortest-paths 这是一个实现了 Yen 的排名算法的无环路径的项目 ...
  • java开源包2

    热门讨论 2013-06-28 09:17:39
    Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输数据压缩、颜色转换、键盘鼠标事件转换等等。 最短路径算法实现 k-shortest-paths 这是一个实现了 Yen 的排名算法的无环路径的项目 ...
  • java开源包3

    热门讨论 2013-06-28 09:20:52
    Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输数据压缩、颜色转换、键盘鼠标事件转换等等。 最短路径算法实现 k-shortest-paths 这是一个实现了 Yen 的排名算法的无环路径的项目 ...
  • java开源包6

    热门讨论 2013-06-28 09:48:32
    Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输数据压缩、颜色转换、键盘鼠标事件转换等等。 最短路径算法实现 k-shortest-paths 这是一个实现了 Yen 的排名算法的无环路径的项目 ...
  • java开源包5

    热门讨论 2013-06-28 09:38:46
    Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输数据压缩、颜色转换、键盘鼠标事件转换等等。 最短路径算法实现 k-shortest-paths 这是一个实现了 Yen 的排名算法的无环路径的项目 ...

空空如也

空空如也

1 2
收藏数 38
精华内容 15
关键字:

串口传输json数据