String introduction json/regular
introduire
Dans les applications de microcontrôleurs traditionnelles, la communication série entre deux microcontrôleurs définit certaines trames, notamment l'en-tête de trame, la trame de données, la trame de contrôle et la queue de trame. Sur la photo se trouve le protocole de contrôle de vol MavLink.
Cette méthode est stable et efficace. Les inconvénients sont également évidents : le développement est un peu plus difficile, vous devez développer votre propre protocole et l'encodage et le décodage doivent être écrits manuellement. Si vous souhaitez essayer rapidement de communiquer entre deux microcontrôleurs. Je recommande d'utiliser le port série pour transmettre des chaînes json !
Avantages : Pas besoin de connaître des choses de bas niveau, telles que :
- Big Endian et Little Endian ne sont pas pris en compte
- Ne prend pas en compte la conversion d'octets de données
- Prend en charge n'importe quelle longueur de int, float
- Simple à comprendre et facile à développer.
Inconvénients : Légèrement moins efficace. L'encodage et le décodage de json occuperont le CPU.
En fait, la transmission de json est devenue un standard dans la programmation réseau. Par exemple, dans l'API restful, le front-end et le back-end utilisent json pour obtenir des informations. Ce n’est tout simplement pas courant dans le domaine des microcontrôleurs traditionnels. D’une part, l’efficacité est légèrement inférieure et les systèmes embarqués ont généralement des exigences de contrôle des coûts plus élevées. Cependant, à mesure que le coût des puces diminue, de nombreuses applications n'ont plus d'exigences très élevées en matière de coûts de matériaux et une attention de plus en plus grande est accordée à l'efficacité du développement.
Chaîne
string = "hello string!"
OpenMV peut envoyer des chaînes directement 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
http://www.runoob.com/python3/python3-string.html
Par exemple :
blobs=[12,23,11,22,33,44]
print("%d", blobs[3])
JSON JSON est un format concis et efficace pour échanger des données. Cela
peut être aussi simple que ceci :
"[[12,0],[10,12],[22,10],[99,11]]"
Remarque : j'utilise cette simple chaîne pour envoyer les coordonnées x, y du patch de couleur dans OpenMV.
Cela peut aussi être complexe comme ceci : ('''représente une chaîne multiligne en python)
'''
{
"number":10,
"color" :[255,0,0],
"rate" :0.65
}
'''
J'utilise cette structure pour envoyer les informations de couleurs collectées par OpenMV au serveur en wifi.
Même, ça peut être comme ça :
'''
{
"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"
}
]
}
'''
Remarque : La forme de json est très similaire à celle de Python, mais json est la forme d'expression d'objet de javascript, qui est légèrement différente de la forme d'expression de python.
python génère json
OpenMV a un module json. json.dumps(obj) et ujson.loads(str) peuvent facilement générer et analyser des chaînes 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}'
Envoyez ensuite la chaîne via le port série, puis analysez la chaîne json dans un objet/tableau à l'autre extrémité. Effectuez ensuite les opérations logiques suivantes.
Modules Json d'autres microcontrôleurs
json est très simple et polyvalent.
- 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 : Jetez-le
Vous pouvez utiliser ces bibliothèques pour convertir des chaînes json en objets.
Modules json pour d'autres langages informatiques
Fondamentalement, tous les langages prennent en charge json (même lisp, ^>^). . . La communication peut donc se faire facilement.
Expression régulière
S'il s'agit d'un simple traitement de chaîne, vous pouvez utiliser certaines des fonctions intégrées de Python, mais pour des exigences plus complexes, vous devez utiliser des expressions régulières.
Par exemple, le traitement des URL. (Ceci n'est pas beaucoup utilisé dans OpenMV. Je vais l'omettre pour l'instant et le présenterai en détail dans mon application réseau MicroPython esp8266)