- Giao diện LCD 16x2 với Raspberry Pi:
- Sơ đồ mạch:
- Hiển thị địa chỉ IP của Raspberry Pi trên màn hình LCD:
- Thực thi Script Định kỳ bằng 'crontab':
Vấn đề chính khi làm việc với Raspberry Pi là phải biết địa chỉ IP của Raspberry Pi, địa chỉ IP này sẽ cần thiết để đăng nhập vào nó bằng một số SSH hoặc ứng dụng truyền tệp. Vì vậy, hôm nay chúng tôi sẽ chia sẻ một số tập lệnh Python để tìm địa chỉ IP cục bộ của Raspberry Pi của bạn trên mạng và hiển thị nó trên Màn hình LCD 16x2. Chúng tôi cũng sẽ thêm tập lệnh vào Crontab để nó có thể chạy cứ sau 10 phút và chúng tôi sẽ có địa chỉ IP được cập nhật mỗi lần.
Giao diện LCD 16x2 với Raspberry Pi:
Trước khi tìm địa chỉ IP của Raspberry PI, trước tiên chúng ta cần giao diện LCD 16x2 với Raspberry Pi. Ở đây trong Dự án này, chúng tôi đã sử dụng Thư viện Adafruit bên ngoài để giao tiếp màn hình LCD 16x2 với Raspberry Pi, sử dụng mà bạn không cần phải viết nhiều dòng mã để điều khiển màn hình LCD và bạn có thể in trực tiếp trên màn hình LCD chỉ bằng một dòng của mã. Tuy nhiên Thư viện này được tạo bởi Adafruit nhưng nó có thể được sử dụng cho bất kỳ mô-đun LCD nào có bộ điều khiển HD44780.
Để sử dụng Thư viện Adafruit, trước tiên chúng ta cần cài đặt nó bằng cách sử dụng các lệnh dưới đây. Lệnh đầu tiên sẽ sao chép kho lưu trữ CharLCD (bởi Adafruit) trên Raspberry Pi của bạn, lệnh thứ hai sẽ đưa bạn vào bên trong thư mục đã tải xuống đó và cuối cùng chúng ta cần thực thi tập lệnh setup.py , được trình bày bên trong thư mục Adafruit_Python_CharLCD, để cài đặt thư viện.
git clone https://github.com/adafruit/Adafruit_Python_CharLCD.git cd./Adafruit_Python_CharLCD sudo python setup.py cài đặt
Bây giờ thư viện cho màn hình LCD 16x2 đã được cài đặt và bạn có thể sử dụng các chức năng của nó bằng cách nhập thư viện này vào chương trình python của bạn bằng dòng dưới đây:
nhập Adafruit_CharLCD dưới dạng LCD
Có một số đoạn mã ví dụ bên trong thư mục ' example ' có trong thư mục thư viện (Adafruit_Python_CharLCD). Bạn có thể kiểm tra thiết lập bằng cách chạy tập lệnh ví dụ char_lcd.py. Nhưng trước đó, bạn cần kết nối các chân LCD với Raspberry Pi như được đưa ra bên dưới trong sơ đồ mạch ở phần tiếp theo.
Bạn cũng có thể kết nối LCD với một số chân GPIO khác của Raspberry Pi, tất cả những gì bạn cần đề cập đến các chân giao diện chính xác trong chương trình python của bạn như bên dưới. Tìm hiểu thêm về Raspberry Pi GPIO Pins tại đây.
# Thiết lập chân Raspberry Pi lcd_rs = 18 lcd_en = 23 lcd_d4 = 24 lcd_d5 = 16 lcd_d6 = 20 lcd_d7 = 21 lcd_backlight = 2
Giờ đây, bạn có thể sử dụng trực tiếp các chức năng do Thư viện Adafruit cung cấp để điều khiển màn hình LCD. Một số chức năng được đưa ra dưới đây; bạn có thể tìm thêm trong tập lệnh ví dụ:
- lcd.message (message) = Để in văn bản trên màn hình LCD.
- lcd.clear () = Để xóa màn hình LCD.
- set_cursor (col, row) = Di chuyển con trỏ đến vị trí bất kỳ tại cột và hàng.
- lcd.blink (True) = Để nhấp nháy con trỏ (Đúng hoặc Sai)
- lcd.move_left () = Để di chuyển con trỏ sang Trái một vị trí.
- lcd.move_right () = Để di chuyển con trỏ sang Phải theo một vị trí.
Nếu bạn muốn kết nối màn hình LCD mà không sử dụng bất kỳ thư viện bên ngoài nào thì bạn có thể xem hướng dẫn trước của chúng tôi, nơi chúng tôi đã viết tất cả các chức năng cho màn hình LCD 16x2. Chọn cái này để giao diện màn hình LCD ở Chế độ 8-bit và cái này để giao diện với màn hình LCD ở chế độ 4-bit.
Sơ đồ mạch:
Hiển thị địa chỉ IP của Raspberry Pi trên màn hình LCD:
Sau khi giao tiếp LCD 16x2 với Raspberry Pi, bây giờ chúng ta cần lấy địa chỉ IP của Raspberry Pi và in nó trên LCD bằng Python Script. Có rất nhiều cách để lấy địa chỉ IP cục bộ của Raspberry Pi, ở đây chúng tôi mô tả ba Tập lệnh Python để lấy địa chỉ IP, bạn có thể sử dụng bất kỳ cách nào trong số chúng.
Sử dụng lệnh Linux:
Trên terminal, chúng ta có thể dễ dàng lấy địa chỉ IP bằng cách sử dụng lệnh hostname –I , vì vậy nếu chúng ta có thể chạy lệnh linux từ python thì chúng ta có thể lấy địa chỉ IP. Vì vậy, để chạy các lệnh Linux từ Python, chúng ta cần nhập một thư viện có tên là các lệnh, vì vậy chương trình hoàn chỉnh sẽ như sau:
nhập thời gian nhập Adafruit_CharLCD dưới dạng lệnh nhập LCD # Thiết lập chân Raspberry Pi lcd_rs = 18 lcd_en = 23 lcd_d4 = 24 lcd_d5 = 16 lcd_d6 = 20 lcd_d7 = 21 lcd_backlight = 2 # Xác định kích thước hàng và cột LCD cho 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 Address: \ n') lcd.getmessage ('hostname -I')) time.sleep (10.0) # Chờ 5 giây lcd.clear ()
Bạn cũng có thể thay thế lệnh tên máy chủ –I trong chương trình bằng lệnh dưới đây nếu bạn muốn lấy địa chỉ IP bằng cách sử dụng lệnh ifconfig đáng tin cậy hơn:
lcd.message (command.getoutput ('ifconfig wlan0 - grep "inet \ addr" - cut -d: -f2 - cut -d "" -f1'))
Sử dụng lập trình Socket:
Ở đây trong chương trình này, chúng ta sẽ tạo một socket của họ AF_INET và nhập SOCK_DGRAM bằng cách sử dụng dòng này: s = socket.socket (socket.AF_INET, socket.SOCK_DGRAM) , sau đó chúng ta sẽ tạo kết nối qua socket bằng một số tên máy hoặc địa chỉ ip như 8.8.8.8, bạn cũng có thể sử dụng một số trang web khác để kết nối với socket như gmail.com. Vì vậy, chúng ta có thể lấy địa chỉ IP cục bộ của RPi từ ổ cắm đã được tạo để giao tiếp giữa Raspberry Pi và địa chỉ IP giả. Dưới đây là toàn bộ Chương trình:
nhập thời gian nhập Adafruit_CharLCD dưới dạng ổ cắm nhập LCD # Thiết lập chân Raspberry Pi lcd_rs = 18 lcd_en = 23 lcd_d4 = 24 lcd_d5 = 16 lcd_d6 = 20 lcd_d7 = 21 lcd_backlight = 2 # Xác định kích thước hàng và cột LCD cho 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 (): ip_address = ''; 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 ('Địa chỉ IP cục bộ: \ n ') lcd.message (get_ip_address ()) # Chờ 5 giây thời gian.sleep (10.0) lcd.clear ()
Tìm hiểu thêm về Lập trình Socket trong python tại đây.
Sử dụng Mô-đun 'fcntl':
Mô-đun này thực hiện kiểm soát tệp và kiểm soát I / O trên bộ mô tả tệp. Ở đây nó được sử dụng để trích xuất địa chỉ IP từ các tệp mạng. Dưới đây là mã Python đầy đủ:
import time import Adafruit_CharLCD as LCD import socket import fcntl import struct # Raspberry Pi pin setup lcd_rs = 18 lcd_en = 23 lcd_d4 = 24 lcd_d5 = 16 lcd_d6 = 20 lcd_d7 = 21 lcd_backlight = 2 # Xác định kích thước cột và hàng LCD cho màn hình 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 (mạng), socket.AGR_INETcket, socket.AGRAMETcket.A. return socket.inet_ntoa (fcntl.ioctl (s.fileno (), 0x8915, # SIOCGIFADDR struct.pack ('256s', mạng))) lcd.message ('Địa chỉ IP cục bộ: \ n') lcd.message (get_interface_ipaddress ('wlan0')) # Chờ 5 giây thời gian.sleep (10.0) lcd.clear ()
Tìm hiểu thêm về cách sử dụng Mô-đun 'fcnfl' tại đây.
Thực thi Script Định kỳ bằng 'crontab':
Bước cuối cùng là thêm mục để chạy tập lệnh này định kỳ 15 phút một lần để chúng tôi có thể nhận được IP cập nhật mọi lúc. Để thực hiện việc này, chúng ta cần chỉnh sửa tệp cron bằng lệnh dưới đây:
crontab –e
Và sau đó nhập dòng dưới đây ở cuối tệp cron và lưu nó bằng CTRL + X, rồi đến Y, sau đó nhập.
* / 15 * * * * sudo python /home/pi/ip_address_lcd.py
Bạn có thể thay đổi địa chỉ theo vị trí của tệp Python Script của mình và bạn cũng có thể thay đổi thời lượng mà bạn muốn chạy lại nhiều lần tập lệnh để có được IP cập nhật.