LCD1602 和 ESP8266 能同时工作了
加电自启也正常了
在解决了各种小问题之后 我的 ESP8266 终于可以连上WiFi 和 LCD1602协同工作了!
本来准备用自己写的 LCD1602驱动的 但是实际测试发现了我写的驱动存在一些问题
1.针脚占用过多(必须rs,rw,en,d0-d7全部接上,没有选择可言)
而且ESP8266 GPIO本来就少,占用了RX 和 TX 接口导致上载程序报错
Arduino:1.8.8 (Windows 10), 开发板:"NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, Disabled, 4M (no SPIFFS), v2 Lower Memory, Disabled, None, Only Sketch, 9600"
项目使用了 258952 字节,占用了 (24%) 程序存储空间。最大为 1044464 字节。
全局变量使用了26672字节,(32%)的动态内存,余留55248字节局部变量。最大为81920字节。
warning: espcomm_sync failed
error: espcomm_open failed
error: espcomm_upload_mem failed
error: espcomm_upload_mem failed
2.功能函数较少,在使用时发现
/**
* return all payload as String (may need lot of ram or trigger out of memory!)
* @return String
*/
const String& HTTPClient::getString(void)
这个函数返回的是 const String& 而我写的是
//写字符串 x:行数 y:列数 (默认屏幕左上角为 第一行第一列) *s为字符串地址
void LCD1602::Write_String(uint8_t x,uint8_t y,const char *s)
还得把String 转成 char 才能输出到LCD1602
看来得使用函数重载来写几个函数方便调用
所以本次测试就不用自己的LCD1602驱动了!(自己嫌弃自己)
还有一个问题就是模块在加电瞬间 LCD1602 正常启动,而 ESP8266 无法正常工作!!(大概率不能同时工作)
首先考虑供电问题:在换用更大的电源后问题依旧存在
既然供电充足,那就得考虑启动顺序了!!
刚开始我想让LCD1602先启动 ,那么如何实现延时电路呢?
我有几块 NE555 ,如果用它来做延时的话还是有点麻烦的(手头没有电容了)
… …
咦?上一次做的一位加法电路用的继电器还剩几个(滑稽)
查了一下
吸合时间足足 10ms 哈哈 应该够了吧
加电测试,啊……………..还是不行!!!!!
换个启动顺序 ESP8266 先;LCD1602后。
一下子就… … 好了。
ESP8266WiFi_TEST.ino
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(16, 5, 4, 0, 2, 14, 12);
void setup()
{
lcd.begin(16, 2);
lcd.print("welcome to SCC!");
delay(1000);
lcd.clear();
WiFi.begin("SSID", "password"); //连接WiFi,填写你的WiFi SSID 和 密码
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
lcd.print(".");
}
delay(1000);
lcd.clear();
lcd.print(WiFi.SSID());
lcd.setCursor(0, 1);
lcd.print(WiFi.localIP());
delay(2000);
}
void loop()
{
HTTPClient http;
http.begin("http://old.sencom.top/yk/api.php");
int httpCode = http.GET();
if (httpCode == HTTP_CODE_OK) //如果 httpCode 等于 200
{
String resBuff = http.getString();
lcd.clear();
lcd.setCursor(0, 0);
for (int i = 0; i < resBuff.length(); i++){
if('1' == resBuff[i]){
lcd.print(i);
lcd.print(" ON ");
}
else{
lcd.print(i);
lcd.print(" OFF ");
}
if(i == 1)
lcd.setCursor(0, 1);
}
}
http.end();
delay(2000);//2s刷新一下
}
调用的是以前写的 SCC 项目 API (目前只是实现四个继电器的开关,暂且用字符串不用JSON了)
2s 读取一次api.php的值
目前只是实现了远程开关继电器后LCD1602的显示效果;具体继电器动作没有加,这个功能实现也很容易(这里就不继续写了)