- ESP8266/32连接WiFi,通过互联网将传感器读数发送到你私有的服务器;
- 服务器中,有一个php脚本,让读数存储在MySQL数据库中;
- 最后通过访问自己的域名来查看读数。
事前准备
首先要有一台已经搭建好LAMP的Linux服务器,最好是云主机,没有的话可以用内网任意一台Linux主机,还没有搭建好的可以看看这个链接参考一下,然后再继续下面的步骤.
创建MySQL数据库和用户
树莓派或者其他Linux发行版的MySQL使用方法是大同小异的,这里不再从基本说起,具体可以百度一下,现在只着重讲讲用户和数据库的创建,后面会讲讲phpmyadmin中的配置流程.
- 新建一个名为
espdb
的数据库
CREATE DATABASE wordpress;
- 新建一个名为
espuser
的用户并设置该用户的密码
create user 'espuser'@'localhost' IDENTIFIED BY '你的密码';
- 给
espuser
这个用户赋予espdb
数据库的权限
GRANT ALL PRIVILEGES ON espdb.* TO 'espuser'@'localhost' IDENTIFIED BY '你的密码';
- 应用配置,输入
FLUSH PRIVILEGES;
后退出
核对一下刚才所创建的项目:
- 数据库:
espdb
- 用户名:
espuser
- 用户密码:
你的密码
配置MySQL数据库
-
使用上一节中所创建的用户名
espuser
和密码进入phpmyadmin并登录:
-
创建一个SQL表
在左侧边栏中,选择数据库名称espdb
并打开“ SQL”选项卡。
确保已打开espdb数据库。然后再单击“ SQL”选项卡。确定确切步骤并运行SQL查询,不然你会可能在错误的数据库中创建了一个表。
复制以下内容后,点击"执行"
完成后,你应该会在左侧看到一个已经被新建的表,名为:SensorData
PHP脚本HTTP POST –在MySQL数据库中接收和插入数据
接下来,回到Linux主机端的SSH操作,创建一个PHP脚本,负责接收来自ESP32或ESP8266的传入请求,并将数据插入MySQL数据库中。这里建议在Windows中使用notepad++编辑好PHP文件后,再用finalshell xftp之类的工具上传到树莓派.如果你是使用树莓派(或其他Linux),并且还没解锁和登录root用户而进行SSH连接的,最好先解锁和设置好获取root用户权限再连接ssh到树莓派,否则接下来操作有些麻烦(VIM使用熟练的可以无视).
-
在你的Apache2制定的网页目录(默认是
/var/www/html
)中创建名为esp-post-data.php
的脚本,内容如下: -
数据库PHP功能脚本
在上一步中的相同目录中创建名为esp-database.php
的脚本,内容如下:添加数据库名称,用户名和密码后,保存文件并继续,如果你尝试在你的域名URL路径中访问,如:
http://你的内网IP或者公网域名/esp-post-data.php
则会看到以只有No data posted with HTTP POST.
这个内容的网页.
PHP脚本–在量规和图形仪表上显示数据库读数
继续在同一目录下,添加CSS文件来设置仪表板样式,并将其命名为esp-style.css
,内容如下:
紧接着,新建一个网页名为esp-weather-station.php
,内容如下:
然后尝试访问http://你的内网IP或者公网域名/esp-weather-station.php
,正常的话你将会看见一个和我的以下图中类似的页面,只是这里的你的实际网页为英文,并且没有出现读数,这是正常的(因为你还没写ESP的代码呢 :huaji: ).到此为止服务器的PHP MySQL已经部署好了,接着我们来写ESP的代码接入你的域名.
ESP8266/32代码写入
准备事项跟上一章:ESP8266气象仪网页版-1一样,这里就直接开始写代码了.
代码:
运行效果:
实际效果可以打开我做的样本:https://chrisxs.com/esp-weather-station.php,有时候我可能会拿来做实验把它拆走,所以偶尔发现是没有数据传入的,正常是每30秒发送一次.
电脑浏览器效果
手机页面效果
补充与说明
Arduino代码
- 可以设置你可能想要更改的变量(
apiKeyValue
,sensorName
,sensorLocation
) apiKeyValue
只是可以修改的随机字符串。此例中是出于安全原因使用它,因此只有知道你的API密钥的任何人才能将数据发布到数据库- 本文代码在
loop ()
中,实际上是每10分钟发出一次HTTP POST请求,并获取最新的BME280读数,而再本文开头的原理流程如图中则是30秒一次,这里可以根据自己需要在代码中修改. - 可以注释上面连接所有BME280读数的
httpRequestData
变量,并使用下面的httpRequestData
变量进行测试:
String httpRequestData = "api_key=tPmAT5Ab3j7F9&sensor=BME280&location=Office&value1=24.75&value2=49.54&value3=1005.14";
PHP
- 在
esp-weather-station
中的这句:
由于我使用了谷歌的jquery,建议没有FQ的朋友自己替换成国内的,这里推荐一个:http://lib.sinaapp.com/js/jquery/1.9.1/jquery-1.9.1.min.js
, 具体可以百度国内可用的jquery.