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的显示效果;具体继电器动作没有加,这个功能实现也很容易(这里就不继续写了)