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.

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)

results matching ""

    No results matching ""