文字列導入 json/regulator
##導入
従来のシングルチップ マイクロコンピュータ アプリケーションでは、2 つのシングルチップ マイクロコンピュータのシリアル ポートが、フレーム ヘッダー、データ フレーム、チェック フレーム、フレーム テールなどのいくつかのフレームを独自に定義することによって通信します。 写真は飛行制御MavLinkのプロトコルです。
この方法は安定していて効率的です。欠点も明らかです。開発が若干難しく、独自のプロトコルを開発する必要があり、エンコードとデコードを手動で記述する必要があります。すぐに 2 つのマイクロコントローラー間の通信を試みたい場合。 json 文字列の送信にはシリアル ポートを使用することをお勧めします。
利点: 次のような低レベルのことを知る必要はありません。
- ビッグエンディアンとリトルエンディアンは考慮されません
- データのバイト変換を考慮しません
- 任意の長さの int、float をサポート
- 理解しやすく、開発も簡単です。
デメリット:効率が若干劣ります。 json のエンコードとデコードは CPU を占有します。
実際、JSON の送信はネットワーク プログラミングの標準になっています。たとえば、Restful API では、フロントエンドとバックエンドは情報を取得するために JSON を使用します。従来のマイクロコントローラーの分野では一般的ではありませんが、一方では効率がわずかに低く、組み込みシステムでは通常、より高いコストの制御要件が必要になります。しかし、チップのコストが下がるにつれて、多くのアプリケーションでは材料コストがあまり要求されなくなり、開発効率がますます重視されるようになりました。
##弦
string = "hello string!"
OpenMV はシリアル ポート経由で文字列を直接送信できます。
from machine import UART
uart = UART(1, 9600)
string = "hello string!"
uart.write(string)
文字列操作
http://www.runoob.com/python3/python3-string.html
例えば:
blobs=[12,23,11,22,33,44]
print("%d", blobs[3])
JSON JSON は、データ交換のための簡潔で効率的な形式です。 これは次のように簡単です。
"[[12,0],[10,12],[22,10],[99,11]]"
注: この単純な文字列を使用して、OpenMV のカラー パッチの x、y 座標を送信します。
次のように複雑にすることもできます: ('''' は Python の複数行の文字列を表します)
'''
{
"number":10,
"color" :[255,0,0],
"rate" :0.65
}
'''
この構造を使用して、OpenMV によって収集された色情報を Wi-Fi 上のサーバーに送信します。
次のようにすることもできます。
'''
{
"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"
}
]
}
'''
注: json の形式は Python の形式に非常に似ていますが、json は JavaScript のオブジェクト表現形式であり、Python の表現形式とは少し異なります。
Python は JSON を生成します
OpenMV には json モジュールがあり、json.dumps(obj) と ujson.loads(str) は簡単に 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))
出力されます:
'[[12, 0], [10, 12], [22, 10], [99, 11]]'
'{"color": [255, 0, 0], "number": 10, "rate": 0.65}'
次に、シリアル ポート経由で文字列を送信し、もう一方の端で json 文字列をオブジェクト/配列に解析します。次に、次の論理演算を実行します。
他のマイクロコントローラーの Json モジュール
json は非常にシンプルで汎用性があります。
- 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: 捨てろ
これらのライブラリを使用して、json 文字列をオブジェクトに変換できます。
他のコンピューター言語用の JSON モジュール
基本的にすべての言語が json (lisp、^>^ も含む) をサポートしています。 。 。そのためコミュニケーションもスムーズに行えます。
正規表現
単純な文字列処理の場合は、Python の組み込み関数の一部を使用できますが、より複雑な要件の場合は、正規表現を使用する必要があります。
たとえば、URL の処理です。 (これは OpenMV ではあまり使用されません。今回は省略し、MicroPython esp8266 ネットワーク アプリケーションで詳しく紹介します)