本帖最后由 lll9p 于 2021-5-29 15:24 编辑
缘起:
我们实验室经常做一些检测,有时候要边升温边测试,我想对设备内部的环境进行监测,我打算用手头上的ESP32-E进行开发。
ESP32可以安装传感器,并连接上wifi,通过数据传输,完全可以监测到环境的温湿度变化~~这里记录一下过程~
硬件列表:
序号 | 名称 | 1 | FireBeetle Board ESP32-E开发板 | 2 | AM2301A 温湿度传感器
| 3 | USB Type-C供电线
| 4 | 充电宝
|
准备工作:
1、开发环境
1)安装esp-idf
根据espressif指南,直接从idf-installer下载安装即可,我用的是2.8的installer。
2)安装esp-idf-lib
由于需要使用温湿度模块,esp-idf-lib有DHT模块的驱动,直接clone即可。
- git clone https://github.com/UncleRus/esp-idf-lib.git
复制代码
2、接线
将AM2301A接到ESP32-E开发板,红线接到3V3,黄线接到GPIO17,黑线接到GND,USB线接到电脑。
开发工作:
1、打开开发环境
- pwsh.exe -nologo -NoExit -Command xxx\esp-idf\export.ps1;xxx\.espressif\python_env\idf4.4_py3.8_env\Scripts\Activate.ps1
复制代码
2、配置ESP32工程
代码可以从我的GITHUB上下载:https://github.com/lll9p/ESP-32-AM2301
设置开发板
复制代码 设置要连接的WIFI账号密码
复制代码 如图所示,设置好之后按s再按q保存退出:
编译上传:
- idf.py build
- idf.py -p com3 flash
复制代码
代码解释:
1、ESP32端
main/main.c
- //设置AM2301的类型和端口
- static const dht_sensor_type_t sensor_type = DHT_TYPE_AM2301;
- static const gpio_num_t dht_gpio = 17;
- //从传感器读取数据并响应http
- int16_t temperature = 0;
- int16_t humidity = 0;
- char data_str[30] = { 0 };
- if (dht_read_data(sensor_type, dht_gpio, &humidity, &temperature) == ESP_OK){
- sprintf(data_str,"%d;%d",temperature,humidity);
- } else {
- sprintf(data_str,"%d;%d",temperature,humidity);
- }
- req->user_ctx = data_str;
复制代码
2、客户端
read.py
- #从命令行读取IP,并从IP获取数据,保存到data.csv
- if len(sys.argv) == 1:
- ip = ""
- else:
- ip = sys.argv[1]
- req = request.Request(f"http://{ip}", method="GET")
- with request.urlopen(req) as f:
- r = f.read().decode('utf-8')
- data = list(map(lambda num: float(num) / 10., r.split(";")))
- df = pd.read_csv("data.csv")
- df = df.append({'temperature': data[0],
- 'humidity': data[1]}, ignore_index=True)
- df.to_csv('data.csv')
复制代码
客户端运行
将ESP32+传感器连接到充电宝,放在设备中,客户端运行 python read.py ,即可从浏览器访问数据,每3秒 更新一次。
效果展示:
带上充电宝安装后是这样的
运行时每隔3秒进行一次更新数据
运行半小时后,没有数据丢失,还是挺稳定的
|