Ik ben me sinds kort weer eens wat meer gaan verdiepen in Arduino en aanverwante zaken. Hier kom in de toekomst nog op terug met een erg leuk nieuw project, maar daarover later meer.
De komende tijd wil ik wat kleine losse zaken laten zien hoe je deze gebruikt en aanstuurt. Ik maak hierbij gebruik van een NodeMcu ESP8266 board wat een ideaal en goedkoop board is voor allerlei toepassingen. Deze heb je al voor onder de 4 Euro op eBay.
Vandaag vertel ik hoe je hiermee een LCD scherm kunt aansturen. We hebben hiervoor nodig:
1 x Breadboard 400/a>
1 x NodeMcu ESP8266 (CH340/CP2102)
1 x LCD1602 LCD module blue
Aansluiten
Het aansluiten is heel eenvoudig als je de pin-aansluitingen van je NodeMCU ESP8266 module weet:
Verbind de volgende pins (LCD – NodeMCU):
GND – GND
Vcc – Vin
SDA (Serial Data) – D2
SCL (Serial Clock) – D1
Programmeren
Voor het programmeren van de NodeMCU gebruiken we de Arduino IDE software die je hier kunt downloaden. Voordat we aan de slag gaan moeten we nog wat instellingen in de Arduino IDE veranderen. Vul bij ‘File > Preferences’ voor ‘Additional Boards Manager URLs’ de volgende waarde in:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
Ga naar Open Boards Manager vanaf ‘Tools > Board’. Scroll naar beneden en selecteer ‘esp8266 by ESP8266 Community’. Kies nu ‘install’.
Ga verder naar ‘Sketch > Include Library > Manage Libraries…’ en installeer de ‘LiquidCrystal_i2C’ library van Frank de Brabander:
We zijn nu klaar om eindelijk te gaan programmeren. Om het LCD scherm aan te sturen kun je onderstaande code gebruiken. Lees vooral het commentaar zodat je hiermee zelf aan de slag kunt gaan.
// // LCD - Small example code how to connect LCD screen to ESP8266 // // by Henri Matthijssen (henri@matthijseninfo.nl) // // Connect your LCD display the next way to your ESP8266 // Display - ESP8266 // GND - GND // Vcc - Vin (or any other Vcc pin) // SDA (Serial Data) - D2 (default declared as SDA) // SCL (Serial Clock) - D1 (default declared as SCL) // Communication with I2C / TWI devices (built-in) #include// Install 'LiquidCrystal_i2C' library from Frank de Brabander // with Libraries Manager (Sketch > Include Library > Manage Libraries...' #include // Constant for my LCD size, adjust to your LCD #define LCDWIDTH 16 #define LCDHEIGHT 2 // Initialize LCD with address and dimensions (characters, lines) // Use 0x27 for PC8574 by NXP // Use 0x3F for PCF8574A by Ti LiquidCrystal_I2C lcd( 0x27, LCDWIDTH, LCDHEIGHT); // Create your own symbols with tool on next location: // https://maxpromer.github.io/LCD-Character-Creator byte ArrowDown [] = { 0x04, 0x04, 0x04, 0x15, 0x0E, 0x04, 0x00, 0x1F }; // // setup // Default setup() method called once by Arduino // void setup() { // Setup serial port for your Serial Monitor Serial.begin(115200); lcd.init(); // Initialize LCD screen lcd.backlight(); // Turn on backlight lcd.createChar(0, ArrowDown); // Define 'ArrowDown' on Memory Location 0 lcd.clear(); // Clear screen lcd.setCursor(4, 0); // Position cursor on Line 1, Position 5 lcd.write(0); // Write symbol from Memory Location 0 lcd.print(" Henri"); // Write string delay(2000); String text = "Dit is een lange tekst om te controleren of deze scrollt op het LCD scherm."; scroll_text( text, 1, 250); delay(2000); lcd.clear(); lcd.print("Klaar"); } // // loop () // Here you find the main code which is run repeatedly // void loop() { ; // Do nothing.... } // // scroll_text // Scroll given text on given row with given speed // void scroll_text( const String &text, int row, int speed ) { if ( (row > LCDHEIGHT) || (speed < 0) ) { lcd.clear(); lcd.print("Error"); } else { int x = LCDWIDTH; int n = text.length() + x; int i = 0; int j = 0; while (n > 0) { if (x > 0) { x--; } lcd.setCursor(x, row); if (n > LCDWIDTH) { j++; i = (j > LCDWIDTH) ? i + 1 : 0; lcd.print(text.substring(i, j)); } else { i = i > 0 ? i + 1 : 0; if (n == text.length()) { i++; } lcd.print(text.substring(i, j)); lcd.setCursor(n - 1, row); lcd.print(' '); } n--; if (n > 0) { delay(speed); } } } }
Zoals je ziet kun je heel eenvoudig je LCD scherm aansturen wat allerlei mogelijkheden biedt. Laat jij in het commentaar eens weten waarvoor jij het LCD scherm allemaal gebruikt?
Hey Henri,
Mooi man! Heb je toevallig ook al eens gekeken om zelf een Ambilight systeem aan te sturen? Een led strip en een raspberry. Dan kan elke tv dit systeem krijgen. Ga hiermee aan het eind van het jaar mee aan de slag. Kijken of het wat wordt. Voor nu… chapeau voor deze tutorial 👌
Bedankt voor je reactie Tim. Je hebt inderdaad een leuke idee met Ambilight. LED strips zijn voor een paar Euro op eBay te vinden en eenvoudig aan te sturen. De uitdaging is dan om een passthrough te maken van je HDMI signaal en afhankelijk hiervan de juiste LEDs en kleuren aan te sturen. Dat ga ik zeker nog eens bekijken. Lijkt me een leuke uitdaging.
PS: Er zijn hiervoor ook kant en klare oplossingen.