将Rpi GPIO数据输出到外部HTTP Web服务器

时间:2019-06-04 15:06:05

标签: php python raspberry-pi python-requests

我正在一个项目中,我想使用python从连接到RPi 3B+ GPIO引脚的不同传感器发送数据,以收集从传感器发送到引脚的数据并发送POST请求。该信息嵌入到外部HTTP server中。该HTTP服务器将充当许多其他Pi的控制台。

我遇到的问题是,我无法让HTTP控制服务器来确认如何处理Pi发送的传入POST请求,因此它最终可以输出某种文本,例如“已收到度量”。

我如何做:

  1. 在我的PC上安装了XAMPP以模拟HTTP控制服务器。
  2. 在Pi上安装了Raspbian 9 Lite和Python请求库。
  3. 使用links2 CLI资源管理器测试了从Pi到XAMPP服务器的连接。
  4. 测试了从Python请求中向POST数据发送到HTTP控制服务器(IP:192.168.0.9)的示例代码。
  5. 服务器以200 OK响应,但是我真的不知道如何处理甚至读取该POST请求。

这是树莓中的代码。

pi@raspberrypi:~ $ more python_requests_example.py
import requests

payload = {'name' : 'test payload' }
p = requests.post('http://192.168.0.9/index.php', payload)

print(p.status_code)

当我运行它时,代码将输出以下内容:

pi@raspberrypi:~ $ python python_requests_example.py
200

我在HTTP控制服务器上捕获了数据包,看到了POST和200 OK,还看到了嵌入在POST包中的有效负载。 (https://imgur.com/fisVeBH

我选择不在Pi上安装整个Web服务器(例如LAMP),因为它不会真正使用。

因此,对于由RPi传感器提供的估算数据,我正在使用Python,并且计划是将这些信息发送到HTTP控制服务器。

我也想纯粹使用PHP处理这个POST请求(如果可能或不太难的话)。我还看到我可以将RPi作为json格式发布,我对此没有太多经验,但是如果更好,我可以对其进行更多的挖掘。

如果不清楚,请告诉我,我会尽力补充。

1 个答案:

答案 0 :(得分:0)

只需保持此帖子的更新,在浏览下面链接的帖子时,我已经找到了解决方案。

  1. [How to get body of a POST in php?
  2. [How to get request content (body) in PHP?

快速解释一下我是如何做到的:

首先,我使用$ _SERVER数组来检测HTTP控制服务器上何时接收到POST请求。然后,我用for u in users_params: user_id = u['user_id'] if user_id not in users: users[user_id] = {} users[user_id][u['param']] = u['value'] # For users with key pairs like # {5063: {'wk1_d2_survey_1': 768, 'wk3_d1_survey_2': 781 ...}} 读取POST正文的内容,然后将其保存到文本文件(目前),以防止POST正文在页面刷新时丢失。

PHP代码如下所示:

file_get_contents('php://input')