当前位置:   article > 正文

micropython websocket_ESP32 arduino教程 :Websocket服务器接收和解析JSON内容

micropython websocket

介绍

测试使用的是一个集成esp - wroom -32模块的开发板:FireBeetle ESP32。代码开发是在MicroPython IDE uPyCraft上完成的。

本文旨在介绍如何在ESP32上运行的Websocket服务器上接收和解析JSON消息。我们将以Arduino内核作为编程框架。

文中对Websocket服务器的操作代码将会以先前的教程内容为基础。本教程介绍了如何安装Arduino库文件以及Python模块,其中Arduino库文件是操作Websocket服务器所必需的文件,而Python模块是测试本文中创建的客户端所必需的模块。

另外,此教程还介绍了JSON解析功能,叙述了如何安装Arduino代码所需的JSON解析库文件。

Python客户端代码

在代码的开始部分,我们将导入websocket模块,以便能够访问连接ESP32 Websocket服务器所需的所有函数。

[mw_shl_code=applescript,true]1 import websocket[/mw_shl_code]

我们还将导入JSON模块,以便能够将Python字典(Python语言的基本数据结构之一)转换为JSON字符串。

[mw_shl_code=applescript,true]1 import json[/mw_shl_code]

接下来,我们将创建一个WebSocket类对象,利用它连接服务器并与服务器交换数据的方法。

[mw_shl_code=applescript,true]1 ws = websocket.WebSocket()[/mw_shl_code]

为了连接ESP32 websocket服务器,我们调用了该对象的connect方法,将目标服务器作为其传递参数,输入格式为“ws:// {ESP32 IP} /”,其中,{ESP32 IP} 表示WiFi网络中分配给ESP32的本地IP地址。

请注意,我们将在Arduino代码中打印出ESP32在网络中的IP地址,所以现在您可以先虚拟一个IP地址并在稍后进行更改。

[mw_shl_code=applescript,true]

1 ws.connect("ws://192.168.1.78/")[/mw_shl_code]

现在,我们将创建一个Python字典,它的某些“键-值”对用于表示传感器的测量值。请注意,这只是一个用作测试目的的数据结构,在实际应用中,ESP32可以充当网关,它可以从底层传感器接收数据,对数据进行处理并将处理结果发送到云端。

[mw_shl_code=applescript,true]myDict = {"sensor": "temperature", "identifier":"SENS123456789", "value":10, "timestamp": "20/10/2017 10:10:25"}[/mw_shl_code]

然后,我们将通过调用WebSocket对象的send方法把数据发送至Websocket服务器。此方法的输入参数是我们需要发送的数据。

在此示例中,需要发送的数据为JSON字符串,它用于表示先前声明的Python字典。为了将字典转换为JSON字符串,我们需要调用JSON模块的dumps函数,将字典数据作为该函数的输入参数。

[mw_shl_code=applescript,true]1 ws.send(json.dumps(myDict))[/mw_shl_code]

在此之后,我们将通过调用WebSocker对象的recv方法来获取服务器响应结果并将其打印出来。

[mw_shl_code=applescript,true]result = ws.recv()

print(result)[/mw_shl_code]

最后,我们将通过调用该对象的close方法来关闭服务器连接。

[mw_shl_code=applescript,true]ws.close()[/mw_shl_code]

完整的Python代码如下所示。

[mw_shl_code=applescript,true]

import websocket

import json

ws = websocket.WebSocket()

ws.connect("ws://192.168.1.78/")

myDict = {"sensor": "temperature", "identifier":"SENS123456789", "value":10, "timestamp": "20/10/2017 10:10:25"}

ws.send(json.dumps(myDict))

result = ws.recv()

print(result)

ws.close()[/mw_shl_code]

Arduino代码

引用的库文件及全

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/196325
推荐阅读
相关标签
  

闽ICP备14008679号