使用ESP32通过Micropython发送HTTP请求(POST)来传输数据,并由PHP服务器接收
环境
微控制器:ESP32
固件:MicroPython1.3
服务器:Ubuntu18.04
Web服务器:Apache2
PHP:PHP7.4
请注意,如果ESP32没有安装Micropython,无法执行,请注意。
如果有人想知道如何安装Micropython,请参考以下链接。>>> 如何在ESP32上安装Micropython(使用uPyCraft工具)
想做的事情

比如,假设我从ESP32获取了传感器的数据,然后想把数据发送到服务器上!
本次操作使用ESP32通过Micropython固件,以HTTP POST方式将数据发送到作为服务器的Ubuntu18.04(Apache2),如上图所示。
ESP32 是一款微控制器,可以用于开发物联网应用程序。
Micropython内置了一个用于进行HTTP请求的模块,它被称为urequests模块。
此次我們將數據轉換為JSON格式進行傳輸,因此需要使用ujson模塊來進行處理。
另外,urequest和ujson这两个Python模块的使用方法与requests和json几乎相同。
以下是源代码。
import urequests
import ujson
#送信先のURLの指定
url = 'http://xxx.xxx.xxx.xxx/test.php'
#データをDICT型で宣言
data = {
"value" : "23.4",
"text" : "Hello World!"
}
#jsonデータで送信するという事を明示的に宣言
header = {
'Content-Type' : 'application/json'
}
#HTTPリクエストをPOSTとして送信
res = urequests.post(
url,
data = ujson.dumps(data).encode("utf-8"),
headers = header
)
#サーバ側からのレスポンスを受け取って表示(jsonのデコードも一緒にしている)
print (res.json())
#終了
res.close()
请参考代码中的注释以了解其含义。
服务器
接收方的程式將使用 PHP 進行編寫。
请预先在网络服务器上启动Apache2。
如果尚未安装PHP,请使用以下命令安装。
sudo apt install php7.4 libapache2-mod-php7.4
$ sudo systemctl start apache2
$ systemctl status apache2
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Drop-In: /lib/systemd/system/apache2.service.d
└─apache2-systemd.conf
Active: active (running) since Wed 2020-12-09 08:01:07 UTC; 1 day 21h ago
Process: 8442 ExecReload=/usr/sbin/apachectl graceful (code=exited, status=0/SUCCESS)
Main PID: 1049 (apache2)
Tasks: 7 (limit: 4915)
CGroup: /system.slice/apache2.service
├─1049 /usr/sbin/apache2 -k start
├─4001 /usr/sbin/apache2 -k start
├─8446 /usr/sbin/apache2 -k start
├─8447 /usr/sbin/apache2 -k start
├─8448 /usr/sbin/apache2 -k start
├─8449 /usr/sbin/apache2 -k start
└─8450 /usr/sbin/apache2 -k start
接下来,我们将开始编写PHP文件。
Apache2 将文件放置在 **/var/www/html/** 目录下。
试验.php
<?php
//送られてきたPOSTデータを受け取って,JSONデータをデコードして$inに入れる.
$in = json_decode(stripslashes(file_get_contents('php://input')),true);
//送られてきたデータを取り出す
$value = $in["value"]; // = 23.4
$text = $in["text"]; // = Hello World!
//レスポンスを「Completed!」とし,それをJSONとして再度エンコード
//そして送信元(ESP32)へ返す.
echo json_encode("Completed!");
?>
请参考注释以了解代码的含义。
进行
我会在ESP32上执行。
>>> execfile("test.py")
["Completed!"]
只要执行后返回了“Completed!”这个字符串,就代表成功。
结束
本次我们使用HTTP POST从ESP32发送数据到服务器。
通过应用这个方法,我们可以将接收到的数据保存到数据库中。
如果时间允许,我计划也写一篇关于这个的文章。