故事背景
在使用http://micropython.org/webrepl/ 的时候,发现链接地址是:ws://192.168.4.1:8266/
只见过http 没有见过ws, 这是什么呢?
什么是Websocket?
WebSocket 是一种网络通信协议,很多高级功能都需要它。
WebSocket 协议在2008年诞生,2011年成为国际标准。所有浏览器都已经支持了。
它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。
使用python 脚本来和websocket 通信:
既然能通过浏览器来何websocket server来通信,那应该可以使用python 的websocket client 来何它通信才对。
pip install websocket-client
折腾一番,成功了。
中途遇到一个坑,webREPL 每个字符都会回显,所以需要把回显的单个字符串在一起。通过while 循环来实现。
这有什么用呢?
可以通过PC 来无线访问单片机。读取传感器的值,比如温度。
from websocket import create_connection
class Dht22Reader():
def __init__(self,addr, ):
self.ws= create_connection(addr)
greet= self.ws.recv()
print(greet)
self.recv_buff= ''
def cmd(self,cmd='',prompt='>>>'):
self.recv_buff= ''
self.ws.send(cmd + '\r\n')
self.wait_for_prompt(prompt)
return self.recv_buff
def wait_for_prompt(self,prompt=''):
while prompt not in self.recv_buff:
self.recv_buff+= self.ws.recv()
print(self.recv_buff)
if __name__== '__main__':
dht= Dht22Reader(addr='ws://192.168.255.11:8266')
dht.cmd('password') # 请输入你自己的web REPL的密码
dht.cmd("print('hello')")
执行打印如下:
Password:
WebREPL connected
>>>
print('hello')
hello
>>>