本文介绍python 应用程序通过 websocket访问modular2edge 上的baseservice ,modular2edge 是我们正在开发的基于RK3399 的工业物联网边缘设备。它基于ubuntu OS ,我们在其上采用了容器技术,并且在linux上开发了基础服务层baseservice。如果你对modular2Edge,BaseService 不了解,请看本人以往的博文。
,下面是一个简单例子。
安装websockets 8.0
官方网站:https://pypi.org/project/websockets/
在Anaconda 命令环境下:
pip install websockets
简单的代码
import websocket
import json
def on_message(ws, message):
print(message)
def on_error(ws, error):
print(error)
def on_close(ws):
print("### closed ###")
def on_open(ws):
jsonrpc={
"jsonrpc":"2.0",
"method":"digitalOut.write",
"params":{"pin":1,"value":0},
"id": 1
}
ss = json.dumps(jsonrpc)
ws.send(ss)
print(ss)
if __name__ == "__main__":
websocket.enableTrace(True)
ws = websocket.WebSocketApp("ws://localhost:2019//iosocket",
on_message = on_message,
on_error = on_error,
on_close = on_close)
ws.on_open = on_open
ws.run_forever()
websocket RPC 机制够灵活吧?
能显示analog波形的例子:
import matplotlib.pyplot as plt
import numpy as np
import websocket
import json
import struct
x = np.arange(0,160,1)
y = np.arange(0,80,0.5)
fig=plt.figure()
fig.suptitle("Weather Station")
ax1=fig.add_subplot(1,1,1)
plt.show()
def on_message(ws, message):
global plt
global ax1
global x
global y
response=json.loads(message)
if "result" in response:
ss=response["result"]["value"]
tt=np.array(ss)
yy=tt.reshape(16,4)
for i in range(160-16):
y[i]=y[i+16]
for i in range(16):
y[i+160-16]=struct.unpack('<f', struct.pack('4B',*yy[i]))[0]
ax1.cla()
ax1.set_ylim([-2,2])
ax1.plot(x,y)
plt.pause(0.0001)
if "method" in response:
print(response["method"])
def on_error(ws, error):
print(error)
def on_close(ws):
print("### closed ###")
def on_open(ws):
jsonrpc={
"jsonrpc":"2.0",
"method":"analog.start",
"params":{"pin":1,"value":1},
"id": 1
}
ss = json.dumps(jsonrpc)
ws.send(ss)
if __name__ == "__main__":
websocket.enableTrace(True)
ws = websocket.WebSocketApp("ws://localhost:2019//iosocket",
on_message = on_message,
on_error = on_error,
on_close = on_close)
ws.on_open = on_open
ws.run_forever()
显示的界面。天哪,遇到的问题居然是 4个字转换成 float!