目标
我们将通过ESP8266连接Thinkphp开发的接收API,将DHT11温度传感器获取到的环境温度、湿度等数据实时发送至服务器,用户可通过设备和OLED触摸屏的实时数据界面查看实时环境温度。
硬件准备:
1)ESP8266-13 WIFI电路板
2)DHT11温湿度传感器
3)0.96”OLED(我使用的版本主控芯片是SSD1306、四线制SPI)
4)USB插座和5v至3.3V稳压器
5)USB-TTL串口下载模块
开发软件
arduino IDE
接下来我来介绍一下我们本次项目使用的控制器ESP8266
简介(来自官方)
-
乐鑫智能互联平台ESP8266EX拥有高性能无线SOC,给移动平台
设计师带来福音,它以最低成本提供最大实用性,为WiFi功能嵌入
其他系统提供无限可能。 -
·ESP8266EX是一个完整且自成体系的WiFi网络解决方案,能够
立运行,也可以作为从机搭载于其他主机MCU运行。ESP8266EX
在搭载应用并作为设备中唯一的应用处理器时,能够直接从外接闪存
中启动。内置的高速缓冲存储器有利于提高系统性能,并减少内存需
求。 -
另外一种情况是,ESP8266EX负责无线上网接入承担WiFi适配器(网卡使用)
的任务时,可以将其添加到任何基于微控制器的设计中,连接简单易
行,身需通过SPI/SDIO接口或|2C/UART口即可。性能
- 802.11b/g/n
- 内置低功耗32位CPU:可以兼作应用处理器
- 内置10bit,高精度ADC
- 内置TCP/管协议栈
- 内置TR开关、balun、LNA、功率放大器和匹配网络
- 内置PLL、稳压器和电源管理组件
- 支持天线分集
- STBC、1×1MIMO、2×1 MIMO
- A-MPDU、A-MSDU的聚合和0.4s的保护间隔
- WiFi@2.4GHz,支持WPAWPA2安全模式
- 支持STA/AP/STA+AP工作模式
- 支持 Smart Config 功能(包括Android和iOS设备)
- SDIO 2.0、(H)SPI、UART、I2C、12S、IR Remote Control、PWM、GPIO
- 深度睡眠保持电流为10uA,关断电流小于5uA
- 2ms 之内唤醒、连接并传递数据包
- 802.11b模式下+20dBm的输出功率
- 待机状态消耗功率小于1.0mW(DTIM3)
- 工作温度范围:-40℃-125℃
- 模细通过CC,CE,TELEC,WiFi Alliance及 SRRC认证
简要介绍一下这个ESP8266,它一共有三种工作模式,AP模式,STA模式,AP+STA模式,每种模式的使用情况介绍如下图:
接下来我来介绍一下我们本次项目使用的传感器DHT11温湿度传感器
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E0qeg5MX-1593946859904)(https://techtutorialsx.files.wordpress.com/2016/04/dht11.png?w=197&h=153)]
DHT11可以测量温度和湿度,是简单环境监测项目的理想选择。它的温度分辨率为1ºC,相对湿度为1%。它的温度范围在0ºC到50ºC之间,湿度的测量范围取决于温度(您可以查看数据表中的详细信息)。
OLED
OLED,即有机发光二极管(OrganicLight-Emitting Diode),又称为有机电激光显示(OrganicElectroluminesence Display, OELD)。因为具备轻薄、省电等特性,因此从2003 年开始,这种显示设备在MP3播放器上得到了广泛应用,而对于同属数码类产品的DC 与手机,此前只是在一些展会上展示过采用OLED 屏幕的工程样品。自2007 年后,寿命得到很大提高,具备了许多LCD 不可比拟的优势。
下面我们开始配置Arduino IDE使其支持ESP8266的开发
如前所述,我们假设使用Arduino IDE对ESP8266进行编程。如果您尚未将其配置为支持ESP8266板。Arduino有一些库可以简化我们与DHT11还有OLED的交互的任务。一个非常简单易用且与ESP8266配合使用的是Simple DHT传感器库OLED则是u8g2。可以通过Arduino IDE Library Manager轻松安装这两个库。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tg3qy3tw-1593946859916)(https://techtutorialsx.files.wordpress.com/2016/04/dht11-esp8266-library1.png?w=640)]
温湿度获取编程:
要导入新安装的库,请在代码顶部添加以下include:
同时使用GPIO引脚的编号声明一个全局变量,以便于更改。在这种情况下,我们将使用GPIO5:
要允许将数据发送到计算机,请在设置功能中启动串行连接:
声明两个字节变量,一个用于温度,另一个用于湿度:
我们使用字节变量,因为DHT11在温度和湿度方面只有8位分辨率。
最后,在主循环函数中,读取值并通过串口发送它们:
打开Arduino IDE的串行监视器,应该会看到类似于图4的内容。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FPQdcSUe-1593946859922)(https://techtutorialsx.files.wordpress.com/2016/04/esp8266-dht11-readings.png?w=640)]
到这里我们就完成了ESP8266对温湿度的获取程序,下一步我们来点亮我们的OLED屏幕
下载程序后是不是屏幕上出现了Hello World!呢?好奇心严重的小宝宝可能发现了这代码没法显示中文啊!!!!
下面我们来修改代码让他显示中文