Introducción de cadena json/regular
introducir
En las aplicaciones de microcontroladores tradicionales, la comunicación en serie entre dos microcontroladores define algunos marcos, incluido el encabezado del marco, el marco de datos, el marco de verificación y la cola del marco. En la imagen está el protocolo de control de vuelo MavLink.
Este método es estable y eficiente. Las desventajas también son obvias: el desarrollo es un poco más difícil, es necesario desarrollar su propio protocolo y la codificación y decodificación deben escribirse manualmente. Si desea intentar comunicar rápidamente entre dos microcontroladores. ¡Recomiendo usar el puerto serie para transmitir cadenas json!
Ventajas: No es necesario saber cosas de bajo nivel, como:
- Big endian y little endian no se consideran
- No considera la conversión de bytes de datos
- Admite cualquier longitud de int, float
- Sencillo de entender y fácil de desarrollar.
Desventajas: Ligeramente menos eficiente. Codificar y decodificar json ocupará la CPU.
De hecho, la transmisión de json se ha convertido en un estándar en la programación de redes. Por ejemplo, en restful api, el front-end y el back-end usan json para obtener información. Simplemente no es común en el campo de los microcontroladores tradicionales. Por un lado, la eficiencia es ligeramente menor y los sistemas integrados suelen tener requisitos de control de costos más altos. Sin embargo, a medida que disminuye el costo de los chips, muchas aplicaciones ya no tienen requisitos muy altos en cuanto a costos de materiales y se presta cada vez más atención a la eficiencia del desarrollo.
Cadena
string = "hello string!"
OpenMV puede enviar cadenas directamente a través del puerto serie.
from machine import UART
uart = UART(1, 9600)
string = "hello string!"
uart.write(string)
Operaciones de cadena
http://www.runoob.com/python3/python3-string.html
Por ejemplo:
blobs=[12,23,11,22,33,44]
print("%d", blobs[3])
JSON JSON es un formato conciso y eficiente para intercambiar datos. Puede ser
tan simple como esto:
"[[12,0],[10,12],[22,10],[99,11]]"
Nota: utilizo esta cadena simple para enviar las coordenadas x, y del parche de color en OpenMV.
También puede ser complejo como este: ("'' representa una cadena de varias líneas en Python)
'''
{
"number":10,
"color" :[255,0,0],
"rate" :0.65
}
'''
Utilizo esta estructura para enviar la información de color recopilada por OpenMV al servidor en wifi.
Incluso, puede ser así:
'''
{
"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"
}
]
}
'''
Nota: La forma de json es muy similar a la de Python, pero json es la forma de expresión de objeto de javascript, que es ligeramente diferente de la forma de expresión de python.
python genera json
OpenMV tiene un módulo json. json.dumps(obj) y ujson.loads(str) pueden generar y analizar cadenas json fácilmente.
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))
Salida:
'[[12, 0], [10, 12], [22, 10], [99, 11]]'
'{"color": [255, 0, 0], "number": 10, "rate": 0.65}'
Luego envíe la cadena a través del puerto serie y luego analice la cadena json en un objeto/matriz en el otro extremo. Luego realice las siguientes operaciones lógicas.
Módulos Json de otros microcontroladores
json es muy simple y versátil.
- Arduino: https://github.com/bblanchon/ArduinoJson
- STM32: http://blog.csdn.net/yannanxiu/article/details/52712723
MicroPython (pyboard, esp8266, samd21): http://docs.micropython.org/en/latest/pyboard/library/ujson.html
NodeMCU (esp8266): https://nodemcu.readthedocs.io/en/master/en/modules/sjson/
- 51: Tíralo a la basura
Puede utilizar estas bibliotecas para convertir cadenas json en objetos.
Módulos JSON para otros lenguajes informáticos
Básicamente, todos los idiomas admiten json (incluso lisp, ^>^). . . De modo que la comunicación se puede realizar fácilmente.
Expresión regular
Si se trata de un procesamiento de cadenas simple, puede usar algunas de las funciones integradas de Python, pero para requisitos más complejos, debe usar expresiones regulares.
Por ejemplo, procesamiento de URL. (Esto no se usa mucho en OpenMV. Lo omitiré por ahora y lo presentaré en detalle en mi aplicación de red MicroPython esp8266)