- Interfacciamento LCD 16x2 con Raspberry Pi:
- Schema elettrico:
- Visualizza l'indirizzo IP di Raspberry Pi sul display LCD:
- Esegui lo script periodicamente utilizzando "crontab":
Il problema principale mentre si lavora con Raspberry Pi è conoscere l'indirizzo IP del Raspberry Pi, che sarà necessario per accedere utilizzando un client SSH o di trasferimento file. Quindi oggi condivideremo alcuni script Python per trovare l'indirizzo IP locale del tuo Raspberry Pi sulla rete e visualizzarlo sullo schermo LCD 16x2. Aggiungeremo anche lo script nel Crontab in modo che possa essere eseguito ogni 10 minuti e avremo l'indirizzo IP aggiornato ogni volta.
Interfacciamento LCD 16x2 con Raspberry Pi:
Prima di trovare l'indirizzo IP del Raspberry PI, dobbiamo prima interfacciare LCD 16x2 con Raspberry Pi. Qui in questo progetto abbiamo utilizzato una libreria Adafruit esterna per interfacciare l'LCD 16x2 con Raspberry Pi, utilizzando la quale non è necessario scrivere molte righe di codice per pilotare l'LCD ed è possibile stampare direttamente sull'LCD usando solo una codice. Tuttavia questa libreria è stata creata da Adafruit ma può essere utilizzata per qualsiasi modulo LCD che abbia il controller HD44780.
Per utilizzare la libreria Adafruit, dobbiamo prima installarla utilizzando i comandi seguenti. Il primo comando clonerà il repository CharLCD (di Adafruit) sul tuo Raspberry Pi, il secondo comando ti porterà all'interno di quella directory scaricata e infine dobbiamo eseguire lo script setup.py , presentato all'interno della directory Adafruit_Python_CharLCD, per installare la libreria.
git clone https://github.com/adafruit/Adafruit_Python_CharLCD.git cd./Adafruit_Python_CharLCD sudo python setup.py installa
Ora la libreria per LCD 16x2 è stata installata e puoi usare le sue funzioni semplicemente importando questa libreria nel tuo programma python usando la riga seguente:
importa Adafruit_CharLCD come LCD
Ci sono alcuni script di esempio all'interno della cartella " examples " che è presente nella cartella della libreria (Adafruit_Python_CharLCD). È possibile testare l'installazione eseguendo lo script di esempio char_lcd.py. Ma prima, è necessario collegare i pin LCD con il Raspberry Pi come indicato di seguito nello schema del circuito nella sezione successiva.
Puoi anche collegare LCD con altri pin GPIO di Raspberry Pi, tutto ciò di cui hai bisogno per menzionare i pin di interfacciamento corretti nel tuo programma Python come di seguito. Ulteriori informazioni sui pin GPIO Raspberry Pi qui.
# Configurazione pin Raspberry Pi lcd_rs = 18 lcd_en = 23 lcd_d4 = 24 lcd_d5 = 16 lcd_d6 = 20 lcd_d7 = 21 lcd_backlight = 2
Ora puoi utilizzare direttamente le funzioni fornite dalla libreria Adafruit per controllare l'LCD. Alcune delle funzioni sono fornite di seguito; puoi trovare di più nello script di esempio:
- lcd.message (message) = Per stampare il testo sul display LCD.
- lcd.clear () = Per cancellare il display LCD.
- set_cursor (col, row) = Sposta il cursore in qualsiasi posizione su colonna e riga.
- lcd.blink (True) = Per lampeggiare il cursore (True o False)
- lcd.move_left () = Per spostare il cursore a sinistra di una posizione.
- lcd.move_right () = Per spostare il cursore a destra di una posizione.
Se vuoi collegare l'LCD senza utilizzare alcuna libreria esterna, puoi controllare il nostro precedente tutorial, dove abbiamo scritto tutte le funzioni per l'LCD 16x2. Selezionare questo per interfacciare l'LCD in modalità 8 bit e questo per interfacciare l'LCD in modalità 4 bit.
Schema elettrico:
Visualizza l'indirizzo IP di Raspberry Pi sul display LCD:
Dopo aver interfacciato LCD 16x2 con Raspberry Pi, ora dobbiamo ottenere l'indirizzo IP di Raspberry Pi e stamparlo su LCD utilizzando Python Script. Esistono molti modi per ottenere l'indirizzo IP locale di Raspberry Pi, qui stiamo descrivendo tre script Python per ottenere l'indirizzo IP, puoi usarne uno qualsiasi.
Utilizzo dei comandi Linux:
Sul terminale, possiamo facilmente ottenere l'indirizzo IP usando il comando hostname –I , quindi se possiamo eseguire il comando linux da python, allora possiamo ottenere l'indirizzo IP. Quindi per eseguire comandi Linux da Python dobbiamo importare una libreria denominata comandi, quindi il programma completo sarà come di seguito:
import time import Adafruit_CharLCD come comandi di importazione LCD # Configurazione pin Raspberry Pi lcd_rs = 18 lcd_en = 23 lcd_d4 = 24 lcd_d5 = 16 lcd_d6 = 20 lcd_d7 = 21 lcd_backlight = 2 # Definisce la dimensione della colonna e della riga LCD per LCD 16x2. lcd_columns = 16 lcd_rows = 2 lcd = LCD.Adafruit_CharLCD (lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows, lcd_backlight) lcd.message ('Local IP.getoutput') comandi lcd.message ('Local IP.getoutput') ('hostname -I')) time.sleep (10.0) # Attendi 5 secondi lcd.clear ()
Puoi anche sostituire il comando hostname –I nel programma con il comando seguente se desideri ottenere l'indirizzo IP utilizzando il comando ifconfig più affidabile:
lcd.message (commands.getoutput ('ifconfig wlan0 - grep "inet \ addr" - cut -d: -f2 - cut -d "" -f1'))
Utilizzo della programmazione Socket:
Qui in questo programma creeremo un socket della famiglia AF_INET e digiteremo SOCK_DGRAM usando questa riga: s = socket.socket (socket.AF_INET, socket.SOCK_DGRAM) , quindi creeremo la connessione attraverso il socket usando un nome host o un indirizzo ip come 8.8.8.8, puoi anche utilizzare un altro sito Web per connetterti con il socket come gmail.com. Quindi possiamo ottenere l'indirizzo IP locale di RPi dal socket che è stato creato per la comunicazione tra Raspberry Pi e un indirizzo IP fittizio. Di seguito il programma completo:
import time import Adafruit_CharLCD come LCD import socket # Configurazione pin Raspberry Pi lcd_rs = 18 lcd_en = 23 lcd_d4 = 24 lcd_d5 = 16 lcd_d6 = 20 lcd_d7 = 21 lcd_backlight = 2 # Definisce la dimensione della colonna e della riga LCD per LCD 16x2. lcd_columns = 16 lcd_rows = 2 lcd = LCD.Adafruit_CharLCD (lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows, lcd_backlight) def get_ip_address (): 'indirizzo_ip = s = socket.socket (socket.AF_INET, socket.SOCK_DGRAM) s.connect (("8.8.8.8", 80)) ip_address = s.getsockname () s.close () return ip_address lcd.message ('Local IP Address: \ n ') lcd.message (get_ip_address ()) # Attendi 5 secondi time.sleep (10.0) lcd.clear ()
Ulteriori informazioni sulla programmazione Socket in Python qui.
Utilizzando il modulo 'fcntl':
Questo modulo esegue il controllo dei file e il controllo I / O sui descrittori di file. Qui viene utilizzato per estrarre l'indirizzo IP dai file di rete. Di seguito è riportato il codice Python completo:
import time import Adafruit_CharLCD come LCD import socket import fcntl import struct # Configurazione pin Raspberry Pi lcd_rs = 18 lcd_en = 23 lcd_d4 = 24 lcd_d5 = 16 lcd_d6 = 20 lcd_d7 = 21 lcd_backlight = 2 # Definisci la dimensione della colonna e della riga dell'LCD per LCD 16x2. lcd_columns = 16 lcd_rows = 2 lcd = LCD.Adafruit_CharLCD (lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows, lcd_backlight) def get_interface_ipaddress (network), socketFOCKINFOCKIN_GRUP_SOCKIN socket_GRET_SOCKIN return socket.inet_ntoa (fcntl.ioctl (s.fileno (), 0x8915, # SIOCGIFADDR struct.pack ('256s', network))) lcd.message ('Local IP Address: \ n') lcd.message (get_interface_ipaddress ('wlan0')) # Attendi 5 secondi time.sleep (10.0) lcd.clear ()
Ulteriori informazioni sull'utilizzo del modulo "fcnfl" qui.
Esegui lo script periodicamente utilizzando "crontab":
Il passaggio finale è aggiungere la voce per eseguire questo script periodicamente ogni 15 minuti in modo da poter ottenere l'IP aggiornato ogni volta. Per fare ciò dobbiamo modificare il file cron usando il comando seguente:
crontab –e
Quindi inserisci la riga sottostante nella parte inferiore del file cron e salvalo usando CTRL + X, quindi Y, quindi invio.
* / 15 * * * * sudo python /home/pi/ip_address_lcd.py
Puoi modificare l'indirizzo in base alla posizione del tuo file Python Script e puoi anche modificare la durata in cui desideri eseguire ripetutamente lo script per ottenere l'IP aggiornato.