字符串简介json/正则

介绍

在传统的单片机应用中,两个单片机串口通信,都是自己定义一些帧,包括帧头,数据帧,校验帧,帧尾。 图中 是飞控MavLink的协议。

这种方式,稳定,高效。缺点也很明显:开发难度稍大,需要自己制定协议,编码解码需要手动编写。如果想快速尝试两个单片机通信的。我推荐使用串口传输json字符串!

优点:不需要了解底层的事情,比如:

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

缺点:效率稍低。json的编码和解码会占用cpu。

其实传输json在网络编程中已经成为标准,比如在restful api中,前端和后端使用json来获取信息。只是在传统单片机的领域中不常见,一方面是效率稍低,嵌入式通常对成本的控制要求比较高。但是随着芯片成本的降低,很多应用对物料成本要求不是很高了,对开发效率越来越重视。

字符串

string = "hello string!"

OpenMV 是可以直接通过串口发送字符串的。

from machine import UART

uart = UART(1, 9600)
string = "hello string!"
uart.write(string)

字符串操作

http://www.runoob.com/python3/python3-string.html

举个例子:


blobs=[12,23,11,22,33,44]

print("%d", blobs[3])

JSON

JSON是一种简洁高效的交换数据的格式。 它可以是这种简单的:

"[[12,0],[10,12],[22,10],[99,11]]"

注:我通过这种简单的字符串,把OpenMV中的色块的x,y坐标发送出去。

也可以是这种复杂的:('''在python中表示多行字符串)

'''
{
    "number":10,
    "color" :[255,0,0],
    "rate" :0.65
}
'''

我使用这种结构把OpenMV采集到的颜色信息发送到wifi中的服务器中。

甚至于,可以像这样:

'''
{
  "firstName": "John",
  "lastName": "Smith",
  "sex": "male",
  "age": 25,
  "address": 
  {
    "streetAddress": "21 2nd Street",
    "city": "New York",
    "state": "NY",
    "postalCode": "10021"
  },
  "phoneNumber": 
  [
    {
      "type": "home",
      "number": "212 555-1234"
    },
   {            
      "type": "fax",
      "number": "646 555-4567"
    }
  ]
}
'''

注意:json的形式和Python很像,但是json是javascript的对象表达形式,和python的表达形式稍有不同。

python生成json

OpenMV有json的模块,json.dumps(obj)和ujson.loads(str)可以很容的生成json字符串和解析json字符串。

import json

obj = [[12,0],[10,12],[22,10],[99,11]]
print(json.dumps(obj))

obj = {
    "number":10,
    "color" :[255,0,0],
    "rate" :0.65
}
print(json.dumps(obj))

会输出:

'[[12, 0], [10, 12], [22, 10], [99, 11]]'

'{"color": [255, 0, 0], "number": 10, "rate": 0.65}'

然后把字符串通过串口发送出去,然后在另一端,把json字符串解析成对象/数组。然后进行接下来的逻辑操作。

其他单片机的json模块

json很简单也很通用。

你可以利用这些库,把json字符串转换成对象。

电脑其他语言的json模块

基本所有的语言都支持json(连lisp都有,^>^)。。。所以可以很容易的进行通信。

正则表达式

如果是一些简单的字符串处理,使用python内置的一些功能就可以,但是对于复杂一些的需求,就需要使用正则表达式了。

比如URL处理中。(此处在OpenMV中使用不多。先略去,在我的MicroPython的esp8266网络应用中会详细介绍)

results matching ""

    No results matching ""