前言
我是一个写代码的程序员,这几个月接触了一下物联网,这几天做了一个esp8266配合土壤湿度传感器的玩意,写个帖子来记录一番。
硬件清单:
NodeMCU (esp8266 wifi 模块)
土壤湿度传感器
DHT11 温湿度传感器
OLED液晶屏
这些在某宝都可以买到,总的下来也就30块左右吧。剩下的杜邦线,面包板这些就不说了,玩这个都需要的。
这里说一下NodeMCU就是基于esp8266进行的二次封装,集成了硬件、软件,也就是不需要自己刷固件了。推荐小白进行开发 ESP8266与NodeMCU的区别和开发方式
软件清单:
- arduino IDE
正式流程
nodeMcu 连接显示屏
这里直接把最难的一步放到最前面。因为我将我这块屏连上nodeMcu就花了好几天。
我这块屏是1.8寸的OLED液晶屏,采用ST7735S驱动。
一开始我用淘宝卖家提供的库进行连接,十分不好用,文档都是英文的,网上百度也没有教程。于是我找到了网上用的最多的一个TFT库:TFT_eSPI,这个库兼容许多驱动,下面就用这个库进行操作。GitHub:TFT_eSPI
下载TFT_eSPI库
首先去GitHub上下载TFT_eSPI,放到Arduino IDE的libraries文件夹下,一般在文档\Arduino\libraries
编辑用户需要的驱动
这一步非常重要,来到TFT_eSPI文件加下找到User_Setup.h这个文件,打开编辑。
找到你的显示屏驱动,然后取消注释。我这里用的ST7735S,但是只有ST7735,就将就着用了,目前没发现问题。
找到屏幕所适合的分辨率,WIDTH宽,HIGHT高。取消注释
接线这一步也是非常的重要,困扰了我好几天。因为我的显示屏引脚和网上的不太一样,实验了很久。
按照上面的内容,将NodeMCU和显示屏进行连接。
这边说一下,有的小伙伴买到的显示屏或许没有SDI/MOSI,其实对应的就是SDA,名字不一样而已。还有SDO/MISO对应SCL,RESET也就是RST。有的还有一个BL,可以不用连。
接下来进TFT_eSPI\examples文件夹,根据分辨率在前三个文件夹进行选择,找到里面的TFT_Rainbow测试案例,进行刷入,测试显示屏是否连接成功。
注:当显示屏和nodemcu连接上并通电时,应该是白色的,说明正负极接对了。
测试程序显示完全后,搁置一旁,进行下面的操作。
连接DHT11温湿度传感器
加载DHT驱动库
在arduino中的工具-管理库中搜索DHT
找到DHT sensor library,选择安装即可。
在传感器上,有三个脚,分别是+、out、-,分别是正极、输入、负极,正负极随便连接nodemcu上的GND和3V3即可,out我这边连接的是D2。
代码
所需的代码(这里只是介绍代码功能,完整代码见末尾):
|
打开串口监视器
连接土壤湿度传感器
土壤湿度传感器有两种,黑色的是四线制的(4个引脚),有数字信号和模拟信号两种输出;红色款是三线制,只有模拟信号。我用的是四线制的。
先将土壤湿度传感器和比较器相连,正负相连。如上图。
然后比较器的GND和VCC分别连接nodemcu的GND和vcc(3v3),AO连nodemcu上的A0,DO因为用不到,所以不连。
下面的是测试程序:
|
将信息显示在屏幕上
如果你的DHT传感器和土壤湿度传感器的测试程序都通过的话,就可以进行下面的操作了。
这里介绍几个屏幕操作代码:
// 初始化彩屏 |
文字取模
因为屏幕不支持汉字,所以要想显示汉字,必须像画图一下在屏幕上一笔一笔的显示出啦。所以需要对汉字进行取模。
这里用到的取模工具:字模提取V2.2
使用方法:
在文字输入区输入汉字
输入完成后按ctrl+enter
左边点击取模方式
选择C51格式
在点阵生成区显示对应的十六进制数
每个汉字对应两行十六进制,复制保存。
//这边解释一下这行代码:
//在屏幕上打印一个汉字。
tft.drawBitmap(x, y, 汉字变量名, 汉字的长, 汉字的宽, 汉字的颜色);准备好后,附上我完整的代码:
|