Introduction aux chaînes de caractères json/expressions régulières
introduction
Dans les applications MCU traditionnelles, lorsque deux MCU communiquent via
des ports série, ils définissent eux-mêmes certaines trames, comprenant
en-tête de trame, trame de données, trame de vérification, et fin de trame.
La figure montre le protocole de contrôle de vol MavLink.

Cette méthode est stable et efficace mais présente des inconvénients évidents tels qu'un problème d'ouverture assez important, nécessitant de créer son propre protocole, ainsi que de compiler le code manuellement. Si vous souhaitez essayer de communiquer entre deux puces uniques, je recommande d'utiliser la transmission par port série de chaînes json !
Caractéristique excellente : il n'y a pas besoin de connaître les problèmes de bas niveau, par exemple :
- pas besoin de considérer l'ordre des octets (big/little endian)
- pas besoin de considérer la conversion d'octets des données
- prend en charge des int, float de longueur arbitraire
- Facile à comprendre et à mettre en œuvre.
Inconvénient : l'efficacité est un peu faible, la compilation et le décodage occuperont le CPU.
En fait, la transmission de JSON est devenue un standard en programmation réseau. Par exemple, dans les API RESTful, le front-end et le back-end utilisent JSON pour obtenir des informations. Ce n'est simplement pas courant dans le domaine des microcontrôleurs traditionnels. D'une part, l'efficacité est légèrement plus faible, et les systèmes embarqués ont généralement des exigences plus élevées en matière de contrôle des coûts. Cependant, avec la réduction des coûts des puces, de nombreuses applications n'ont pas d'exigences très élevées en matière de coûts matériels, et accordent de plus en plus d'attention à l'efficacité du développement.
Chaîne de caractères
string = "hello string!"
OpenMV est capable d'envoyer une chaîne de caractères via le port série.
from machine import UART
uart = UART(1, 9600)
string = "hello string!"
uart.write(string)
Opérations sur les chaînes de caractères
http://www.runoob.com/python3/python3-string.html
Par exemple :
blobs=[12,23,11,22,33,44]
print("%d", blobs[3])
JSON est une forme concise et efficace d'échange de données. Il peut
être aussi simple que ceci :
"[[12,0],[10,12],[22,10],[99,11]]"
Remarque : j'utilise une chaîne de caractères aussi directe pour envoyer les coordonnées x, y d'un bloc de couleur dans OpenMV.
Il peut aussi être aussi complexe que ceci : (‘’’ indique une chaîne multi-lignes en python)
'''
{
"number":10,
"color" :[255,0,0],
"rate" :0.65
}
'''
J'utilise cette structure pour envoyer les informations de couleur collectées dans OpenMV vers le serveur wifi.
Ainsi, par exemple, cela peut ressembler à ceci :
'''
{
"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"
}
]
}
'''
Attention : la forme du json ressemble à Python, mais json est la forme d'expression concernant le sujet, elle n'est pas tout à fait identique à la représentation de python.
Python génère du json
OpenMV dispose des modules json, json.dumps(obj) et ujson.loads(str) permettent facilement de convertir en chaîne json et de décoder une chaîne 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))
Affichera :
'[[12, 0], [10, 12], [22, 10], [99, 11]]'
'{"color": [255, 0, 0], "number": 10, "rate": 0.65}'
Ensuite, envoyez les chaînes via le port série, à l'autre extrémité, décodez la chaîne json en objet/tableau et poursuivez avec l'opération logique suivante.
Modules json d'autres puces uniques
Json est simple et universel.
- 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 : Laissez tomber
Vous pouvez utiliser ces bibliothèques pour transformer une chaîne json en objet.
Modules json d'autres langages sur ordinateur
En gros, tous les langages prennent en charge json (même lisp), il est donc facile de communiquer.
Expression régulière
S'il s'agit d'un traitement simple de chaîne de caractères, il suffit d'utiliser certaines fonctions internes. Mais pour des besoins relativement complexes, vous aurez besoin d'expressions régulières.
Par exemple, pour le traitement d'URL (cela ne sera pas souvent utilisé dans OpenMV, je vais l'omettre, il y aura une brève introduction sur l'application réseau esp dans mon MicroPython)