实现效果
硬件准备
- NodeMCU-ESP8266开发板
- lcd1602显示屏(使用I2C总线)
- 杜邦线若干
- 可以联网的WiFi信号
软件环境
- Arduino IDE
- 心知天气API(免费版够用)
连线:NodeMCU——I2C
- GPIO4——SDA
- GPIO5——SCL
- VIN——VCC
- GND——GND
这里这个连线还是很坑的。
供电之所以使用VIN而不使用3.3V,是因为VIN的供电是5V的,3.3V供电也不是不行,但是显示效果不太行,几乎看不清。
另外,之前网上看别人做lcd1602显示,都是连D3、D4两个脚,然后一直不管用,直到忍无可忍查了NodeMCU-ESP8266的管脚功能表,如下:(来源: https://tttapa.github.io/ )
GPIO | Function | State | Restrictions |
---|---|---|---|
0 | Boot mode select | 3.3V | No Hi-Z |
1 | TX0 | - | Not usable during Serial transmission |
2 | Boot mode select TX1 | 3.3V (boot only) | Don’t connect to ground at boot time Sends debug data at boot time |
3 | RX0 | - | Not usable during Serial transmission |
4 | SDA (I²C) | - | - |
5 | SCL (I²C) | - | - |
6 - 11 | Flash connection | x | Not usable, and not broken out |
12 | MISO (SPI) | - | - |
13 | MOSI (SPI) | - | - |
14 | SCK (SPI) | - | - |
15 | SS (SPI) | 0V | Pull-up resistor not usable |
16 | Wake up from sleep | - | No pull-up resistor, but pull-down instead Should be connected to RST to wake up |
开发过程
开发之前先去心知天气注册一个账户 ,申请一个免费的API,用来获取实时天气。
引入最基本的ESP8266WiFi
库,先连接一个能上网的WiFi,使用ESP8266通过http请求获取信息,几秒钟请求一次,更新信息。返回的是一个JSON字符串,使用ArduinoJson
库函数解析JSON,得到需要的具体数据。最后通过LiquidCrystal_I2C
库将天气情况显示在LCD1602上。
代码与库
本项目: https://github.com/liuzengyun/esp8266_Weather
ArduinoJSON库: https://github.com/bblanchon/ArduinoJson
LiquidCrystal_I2C库:Arduino IDE中库管理中下载即可。