入手NodeMCU(ESP8266)玩玩——自动浇花
背景
家里养了几盆花,有时长时间出门,总是担忧家里的花浇水的问题。
一开始想利用家里的树莓派直接做一个就好,看了一圈之后决定还是找个别的单片机/开发板来做,看ESP8266平台基础的NodeMCU很便宜,那么就是它了。
也许有人会说,为啥不买现成的成品,买成品还有diy的乐趣么?
ESP8266/NodeMCU简介
ESP8266是一块由乐鑫espressif设计的wifi芯片,虽然是个无线网络解决方案,但是它更像一个物联网解决方案,体积很小,造价低廉。
ESP8266的核心是一块Diamond Standard 106Micro
控制器,该控制器是一个低功耗的32位RISC控制器,拥有GPIO、I2C、ADC等多个模块。
NodeMCU的项目发起人黄锐想在自己的项目中使用WiFi芯片,选型时选择了ESP8266,在了解了ESP8266的内核之后,发现芯片性能颇为强大,于是与开源社区爱好者zeroday商量之后,发起了NodeMCU项目。
现在的ESP8266已经支持多种开发方式,如AT指令
、C
、Python
、Lua
、Ardunio
等。
开始折腾
X宝上随便找了一家,将所有的配件全部买齐,清单如下:
- NodeMCU开发板 * 1
- 5v光耦隔离继电器驱动模块(支持高低电平出发) * 1
- 5v小水泵 * 1
- 杜邦线若干
- 水管若干
拿到之后就坑了,使用putty通过COM口连接,可以联通但收不到任何信息,仔细观察了一下,发现Wifi模块的屏蔽壳跟引脚搭锡短接,万幸的是没有造成损坏,只好自己用壁纸刀稍微割几下。
再次上电,终于可以正常操作了。
刷入MicroPython固件
大D不了解Lua,所以还是使用最熟悉的Python
,MicroPython
是微控制器的精简版本。
配置环境
有多种方式可以给ESP8266刷固件,这里就直接用官方提供的esptool,早期的esptool只提供Python 2.x的版本,现在已经支持Python 3了,直接通过pip安装即可。
1 |
pip install esptool |
安装工具的过程需要根据自己的Python环境来看,例如在多Python版本共存的Windows上,可以选择:
1 |
py -3 -m pip install esptool |
清空flash
有的时候,写入固件后会有各种问题,所以为了保险起见,先将固件清空。
1 |
py -3 -m esptool -p COM7 erase_flash |
其中,COM7为端口号,可以在设备管理器内查看。如果是Linux系统,则可以通过查看/dev
来知道连接位置。
写入固件
1 |
py -3 -m esptool -p COM7 write_flash 0x0 固件.bin |
同样,其中的COM7为端口号,0x0为写固件的地址,后面跟固件名。
固件下载地址:http://micropython.org/download#esp8266
建议使用稳定版本。
写完固件后,按板子上的RST键重启开发板,即可使用putty连接上去。
开启Wifi
使用putty连接之后,如果需要开启wifi,那么可以输入以下代码:
1 2 3 4 |
import network wlan = network.WLAN(network.STA_IF) wlan.active(True) wlan.connect("ssid名称", "wifi密码") |
使用webrepl上传main.py
开发板写入了MicroPython的固件之后,每次启动会找寻是否存在main.py文件,如果有则执行该文件的内容。那么我们需要使用webrepl来进行上传。
1 2 3 4 5 |
# 加载webrepl_setup库 import webrepl_setup # 执行后会询问你是否每次启动时都运行,建议输入E来选择是。 # 然后要你设置一个webrepl的访问密码。 |
设置完成开发板重启之后,可以访问:
http://micropython.org/webrepl/
会看到如下界面:
这里就有两种选择:
- 一是打开该页面后断开当前网络,通过无线网连接到NodeMCU的AP上,然后直接点击Connect连接。
- 二是让NodeMCU连接到wifi上,通过路由分配的IP地址来连接。
这两种方式根据个人的情况来选择就好了。
将写好的main.py
文件通过webrepl的send a file功能发送到开发版上即可。
大D是使用第二种方法,然后将连接wifi的代码写进main.py
,每次启动开发板都可以自动wifi连接,十分方便。
控制GPIO
要自动浇花,其实说白了就是通过开发板来通过高低电平控制继电器的闭合与断开,再由继电器来控制小水泵抽水,所以最关键的部分就是控制GPIO来说输出高低电平。
MicroPython内建了machine
库来支持开发板的硬件控制部分。
这里提供一个针脚定义的图片。
那么这里以控制GPIO13为例,Python代码如下:
1 2 3 4 5 6 7 8 |
import machine # 定义GPIO13为输出接口 p13 = machine.Pin(13, machine.Pin.OUT) # 输出高电平 p13.on() # 输出低电平 p13.off() |
能够控制继电器就等于是大功告成了,至于定时,最简单的方式是使用time.sleep
来睡眠等待,大D也是这样做的,具体的实现代码相当的简单,也就不放出来了。
接入继电器
大D使用的就是下图这种1路光耦隔离继电器驱动模块,之所以没有直接采购继电器,是因为由于ESP8266输出的电流较小,如果直接采购继电器,需要搭建一个扩流驱动电路来驱动继电器。
有这种便宜模块用,直接就上这种模块就是了。
DC+/DC-接入NodeMCU的3.3V/GND脚,根据定义,GPIO13在板上的编号为7,那么将IN接入7脚。
另一侧的端口有三个,分别为NC常闭口,NO常开口,COM公共口。
NC口为继电器未闭合时与COM口短接导通,闭合时悬空断开。
NO口为继电器未闭合时悬空断开,闭合时与COM口导通。
根据实际代码编写的情况将水泵的一根电源线剪开,接入继电器的COM口和NC口(或者NO口)即可。
测试时,当p13.on()
执行时,就可以听到继电器闭合的哒哒声。
实验视频
还是上个小视频好了,泵选的有点小,有条件的可以找个大点的泵,从一个桶里抽水上来。
已有 15 条评论
发表评论
电子邮件地址不会被公开。 必填项已标注。
实力沙发YM!
求放过
膜拜大D
可以的
可以在自己家组个网,和树莓派等玩意儿配合,弄一些条件搞成全自动
现在跟全自动有啥区别?除了手动加水之外。
哈哈哈,tb上有几块钱的土壤湿度检测模块,数字式的。可以的话加一次水,管一年
我不是只浇一盆花,买一堆传感器不符合低成本实现的需求。
真要湿度检测,我买几个三极管就好了,根本不用模块。
加一次水管一年,你考虑过水长时间放置的影响么?考虑过自然蒸发的情况么?考虑过水泵吸力和扬程的问题么?
本来就是因为人不在家而使用的,养花的过程可不是就浇个水就完了。
而且,全自动的话,还有养花的乐趣么?
父上也在养花花草草,我一直想给他DIY一套自动化养殖系统。
大家想法不同,一条提示而已,看来触动了养花人的执念啊。: )
有爱才能体会到养花养草或者说为自己的爱好付出时间精力获得回报时的美好。
大D,你的水泵什么型号
就是某宝上随便搜了一个便宜的。
你好,8266用3.3v口连接使用5v光耦继电器,我试了平放可以正常吸合使用,立起来放置就只是指示灯会亮但是没有吸合声音也无法使用了。
你有没这样子情况呢?不过8266还好有个5v口,换到5v口就正常了。
没有遇到过,我买到的光耦继电器是兼容3v-5v都可以触发的。
可能你买到的光耦继电器必须在5v才能触发才这样。
倒是有可能,不过买的和你图片上那款一模一样,所以我才问问。我看了下3v-5v继电器的外观和图片上这款完全不一样。普通5v两块钱,3-5v至少4块钱,不过还是直接把几个5v继电器并一起,全接到5v口上来得实惠。多谢。