Introdução de string json/regular
introduzir
Nas aplicações de microcontroladores tradicionais, a comunicação série entre dois microcontroladores define alguns quadros, incluindo o cabeçalho do quadro, o quadro de dados, o quadro de verificação e o final do quadro. A imagem mostra o protocolo de controlo de voo MavLink.
Este método é estável e eficiente. As desvantagens também são óbvias: o desenvolvimento é um pouco mais difícil, é necessário desenvolver o seu próprio protocolo e a codificação e descodificação têm de ser escritas manualmente. Se pretender tentar a comunicação rápida entre dois microcontroladores. Recomendo a utilização da porta série para transmitir strings json!
Prós: Não há necessidade de saber coisas de baixo nível, tais como:
- Big endian e little endian não são considerados
- Não considera a conversão de bytes de dados
- Suporta qualquer comprimento de int, float
- Simples de entender e fácil de desenvolver.
Desvantagens: Um pouco menos eficiente. A codificação e descodificação do json ocuparão a CPU.
Na verdade, a transmissão de json tornou-se um padrão na programação de rede. Por exemplo, na API restful, o front-end e o back-end utilizam json para obter informações. Simplesmente não é comum no campo dos microcontroladores tradicionais. No entanto, à medida que o custo dos chips diminui, muitas aplicações deixam de ter requisitos muito elevados de custos de materiais e é dada cada vez mais atenção à eficiência do desenvolvimento.
Corda
string = "hello string!"
O OpenMV pode enviar strings directamente pela porta série.
from machine import UART
uart = UART(1, 9600)
string = "hello string!"
uart.write(string)
Operações de string
http://www.runoob.com/python3/python3-string.html
Por exemplo:
blobs=[12,23,11,22,33,44]
print("%d", blobs[3])
JSON JSON é um formato conciso e eficiente para troca de dados. Pode ser
tão simples como isto:
"[[12,0],[10,12],[22,10],[99,11]]"
Nota: Utilizo esta string simples para enviar as coordenadas x, y do patch de cor no OpenMV.
Também pode ser complexo assim: ('''' representa uma string multilinha em python)
'''
{
"number":10,
"color" :[255,0,0],
"rate" :0.65
}
'''
Utilizo esta estrutura para enviar a informação de cor recolhida pelo OpenMV para o servidor em wifi.
Inclusive, pode ser assim:
'''
{
"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: A forma de json é muito semelhante à de Python, mas json é a forma de expressão de objeto de javascript, que é ligeiramente diferente da forma de expressão de python.
python gera json
O OpenMV tem um módulo json. dumps(obj) e ujson.loads(str) podem facilmente gerar e analisar strings 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))
Produzirá:
'[[12, 0], [10, 12], [22, 10], [99, 11]]'
'{"color": [255, 0, 0], "number": 10, "rate": 0.65}'
Em seguida, envie a string através da porta série e analise a string json num objeto/matriz na outra extremidade. Em seguida, execute as próximas operações lógicas.
Módulos Json de outros microcontroladores
json é muito simples e 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: Deite fora
Pode utilizar estas bibliotecas para converter strings JSON em objetos.
Módulos JSON para outras linguagens de computador
Basicamente todas as linguagens suportam json (até mesmo lisp, ^>^). . . Portanto, a comunicação pode ser feita facilmente.
Expressão regular
Se for um processamento simples de strings, pode utilizar algumas das funções integradas do Python, mas para requisitos mais complexos, precisa de utilizar expressões regulares.
Por exemplo, processamento de URL. (Isto não é muito utilizado no OpenMV. Vou omiti-lo por enquanto e apresentá-lo em detalhe na minha aplicação de rede MicroPython esp8266)