Отобразить сообщение на 2 16 символах lcd, используя respberry pi 3 при запуске системы

CodeX спросил: 13 июня 2018 в 07:50 в: python

У меня есть raspberry pi 3 B.

Использовать случай: Чтобы напечатать ip address и time на экране 2 * 16 character lcd при запуске системы или перезагрузке.

Для этого я использую код python который работает нормально, когда я запускаюсь с терминала.

Проблема: при запуске системы ничего не отображается на экране lcd.

Детали:

Я пробовал три способа:

путь 1:

I добавили в /etc/rc.local следующие строки

echo "Display ip to 2*16 char display from /etc/rc.local" >> /home/pi/Workspace/python/pi-screen/logs.logsudo /usr/bin/python /home/pi/Workspace/python/pi-screen/src/display.py >> /home/pi/Workspace/python/pi-screen/logs-1.log

При перезагрузке системы ожидалось, что он должен печатать на lcd display, но это не так.

Когда я запускаю display.py с консоли с помощью python display.py, он запускает файл и печатает на 2 * 16 characters lcd display как ожидалось.

Путь 2:

Я даже попытался добавить скрипт к /etc/init.d/lcd.

, когда используя /etc/init.d/lcd start, он работал, но при запуске системы, но он тоже не работал.

путь 3:

Использование .bashrc (не рекомендуется)

Я добавил строку ниже в .bashrc и работал .

#Show IP Address (temp solution)
/home/pi/Workspace/python/pi-screen/src/display.py

Добавление в .bashrc не является предпочтительным, поскольку оно печатает на экране lcd при каждом входе в систему.

----------------------------------------------------------------------

Используемый код:

Файл инициализации lcd /etc/init.d/lcd

### BEGIN INIT INFO
# Provides: LCD - date / time / ip address
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Liquid Crystal Display
# Description: date / time / ip address
### END INIT INFO#! /bin/sh
# /etc/init.d/lcdexport HOME
case "$1" in
    start)
        echo "Starting LCD"
        /home/pi/Workspace/python/pi-screen/src/display.py  2>&1 &
    ;;
    stop)
        echo "Stopping LCD"
        LCD_PID=`ps auxwww | grep pi-screen | head -1 | awk '{print $2}'`
        kill -9 $LCD_PID
    ;;
    *)
        echo "Usage: /etc/init.d/lcd {start|stop}"
        exit 1
    ;;
esac
exit 0

display.py

#!/usr/bin/python
import time
import display_conf
import utilslcd = display_conf.get_lcd()def show_msg(msg, how_long):
    lcd.message(msg)
    time.sleep(how_long)
    lcd.clear()if __name__ == "__main__":
    now = utils.get_time()
    ip = utils.get_host_ip()
    msg = now + "\n" + ip    show_msg(msg, 10)

display_config.py

import Adafruit_CharLCD as LCDdef get_lcd():
    # Raspberry Pi pin setup
    lcd_rs = 25
    lcd_en = 24
    lcd_d4 = 23
    lcd_d5 = 17
    lcd_d6 = 18
    lcd_d7 = 22
    lcd_backlight = 2    # Define LCD column and row size for 16x2 LCD.
    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)    return lcd

utils.py

import socket
import timedef get_host_ip():
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.connect(("8.8.8.8", 80))
    ip = s.getsockname()[0]
    s.close()    return ipdef get_time():
    now = time.strftime("%Y-%m-%d %H:%M:%S")
    return now

Примечание: /home/pi/Workspace/python/pi-screen/src/display.py и /etc/init.d/lcd оба имеют разрешение на выполнение.


1 ответ

hcheung ответил: 13 июня 2018 в 04:15

Запуск скрипта python с помощью /etc/rc.local:

1) Отредактируйте файл с помощью sudo /etc/rc.local;

2) Добавьте следующее в файл прямо перед exit 0:

(sleep 5;python /home/pi/Workspace/python/pi-screen/src/display.py)&

Скобки позволяют запускать несколько команд в фоновом режиме. sleep 5 задерживает запуск скрипта на 5 секунд, так как некоторые из сервисов, зависящих от вашего сценария, могут быть недоступны во время загрузки rc.local.

Альтернативно вы можете использовать crontab @reboot для автоматизации выполнения вашего скрипта.

Использование crontab:

1) запустить командную строку sudo crontab -e;

2) добавьте команду в конец файла:

@reboot /usr/bin/python /home/pi/Workspace/python/pi-screen/src/display.py

Дополнительное видео по вопросу: Отобразить сообщение на 2 16 символах lcd, используя respberry pi 3 при запуске системы

Raspberry Pi 3: обзор, первое включение, настройка – Часть 1

Raspberry Pi 3: OpenCV (#1) – установка библиотеки (Python 3)

Raspberry Pi 3 (Обзор)