I have managed to get my 1602 I2C LCD working on a NodeMCU devkit. I can display text parsed from the web but I am not sure how to set it to autroscroll if message is greater than 16 characters. I tried the lcd.ScrollDisplayLeft()
but it doesn't work. I figured I would have to do it manually and it is a matter of getting string length and then looping the characters.
This is what I have so far:
#include <ESP8266WiFi.h>
#include <Wire.h> // This library is already built in to the Arduino IDE
#include <LiquidCrystal_I2C.h> //This library you can add via Include Library > Manage Library >
LiquidCrystal_I2C lcd(0x3F, 16, 2);
const char* ssid = "ssid";
const char* password = "pass";
const char* host = "api.thingspeak.com";
int find_text(String needle, String haystack, int from) {
int foundpos = -1;
if (haystack.length() < needle.length())
return foundpos;
for (int i = from; (i < haystack.length() - needle.length()); i++) {
if (haystack.substring(i, needle.length() + i) == needle) {
foundpos = i;
return foundpos;
}
}
return foundpos;
}
void setup() {
Serial.begin(115200);
delay(100);
lcd.init(); // initializing the LCD
lcd.backlight(); // Enable or Turn On the backlight
delay(200);
// We start by connecting to a WiFi network
Serial.println();
Serial.println();
Serial.println(ssid);
WiFi.begin(ssid, password);
lcd.setCursor(0, 0);
Serial.print("Connecting to ");
lcd.print("Connecting");
lcd.setCursor(1, 1);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
lcd.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Connected!!");
delay(1000);
}
int value = 0;
void loop() {
Serial.print("connecting to ");
Serial.println(host);
// Use WiFiClient class to create TCP connections
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort)) {
Serial.println("connection failed");
}
// We now create a URI for the request
String url = "/apps/thinghttp/send_request?api_key=345345345345345";
Serial.print("Requesting URL: ");
Serial.println(url);
// This will send the request to the server
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Fetching Data..");
delay(10000);
// Read all the lines of the reply from server and print them to Serial
while (client.available()) {
String line = client.readStringUntil('\r');
int start_loc = find_text("<b>", line, 0);
int end_loc = find_text("</b>", line, 0);
if (start_loc > 0 && end_loc > 0)
{
lcd.clear();
Serial.println("data: ");
lcd.print("data: ");
lcd.setCursor(1, 1);
for (int i = start_loc + 3; i < end_loc; i++)
{
Serial.print(line[i]);
lcd.print(line[i]);
}
Serial.println();
Serial.println("closing connection");
delay(2000);
}
}
}