【问题标题】:How do I update this code every second and minute with crontab如何使用 crontab 每秒和每分钟更新此代码
【发布时间】:2018-07-26 17:45:10
【问题描述】:

我正在使用 Raspberry Pi 和带 I2C 的 16x2 LCD 显示屏来显示日期、时间(包括秒数)和设备的 IP 地址。

脚本位于 cron 表中,并计划每分钟运行一次。在脚本本身内,秒数会每秒重新加载。

代码只工作了整整五分钟,然后显示的文本开始中断。我对 Python 不是很熟悉,因此我感谢任何反馈,以使此代码更正确。

cron 表项只是:

* * * * * python /home/pi/display.py

我主要只是操纵了代码的底部:

#!/usr/bin/env python

import time
import smbus
import socket
import fcntl
import struct

BUS = smbus.SMBus(1)

def write_word(addr, data):
    global BLEN
    temp = data
    if BLEN == 1:
            temp |= 0x08
    else:
            temp &= 0xF7
    BUS.write_byte(addr ,temp)

def send_command(comm):
    # Send bit7-4 firstly
    buf = comm & 0xF0
    buf |= 0x04               # RS = 0, RW = 0, EN = 1
    write_word(LCD_ADDR ,buf)
    time.sleep(0.002)
    buf &= 0xFB               # Make EN = 0
    write_word(LCD_ADDR ,buf)

    # Send bit3-0 secondly
    buf = (comm & 0x0F) << 4
    buf |= 0x04               # RS = 0, RW = 0, EN = 1
    write_word(LCD_ADDR ,buf)
    time.sleep(0.002)
    buf &= 0xFB               # Make EN = 0
    write_word(LCD_ADDR ,buf)

def send_data(data):
    # Send bit7-4 firstly
    buf = data & 0xF0
    buf |= 0x05               # RS = 1, RW = 0, EN = 1
    write_word(LCD_ADDR ,buf)
    time.sleep(0.002)
    buf &= 0xFB               # Make EN = 0
    write_word(LCD_ADDR ,buf)

    # Send bit3-0 secondly
    buf = (data & 0x0F) << 4
    buf |= 0x05               # RS = 1, RW = 0, EN = 1
    write_word(LCD_ADDR ,buf)
    time.sleep(0.002)
    buf &= 0xFB               # Make EN = 0
    write_word(LCD_ADDR ,buf)

def init(addr, bl):

    global LCD_ADDR
    global BLEN
    LCD_ADDR = addr
    BLEN = bl
    try:
            send_command(0x33) # Must initialize to 8-line mode at first
            time.sleep(0.005)
            send_command(0x32) # Then initialize to 4-line mode
            time.sleep(0.005)
            send_command(0x28) # 2 Lines & 5*7 dots
            time.sleep(0.005)
            send_command(0x0C) # Enable display without cursor
            time.sleep(0.005)
            send_command(0x01) # Clear Screen
            BUS.write_byte(LCD_ADDR, 0x08)
    except:
            return False
    else:
            return True

def clear():
    send_command(0x01) # Clear Screen

def openlight():  # Enable the backlight
    BUS.write_byte(0x27,0x08)
    BUS.close()

def write(x, y, str):
    if x < 0:
            x = 0
    if x > 15:
            x = 15
    if y <0:
            y = 0
    if y > 1:
            y = 1

    # Move cursor
    addr = 0x80 + 0x40 * y + x
    send_command(addr)

    for chr in str:
            send_data(ord(chr))


def get_ip_address(ifname):
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    return socket.inet_ntoa(fcntl.ioctl(
        s.fileno(),
        0x8915,
        struct.pack('256s', ifname[:15])
    )[20:24])


if __name__ == '__main__':
    init(0x27, 1)
    write(0, 1, 'IP: ' + get_ip_address('wlan0'))
    write(0, 0, time.strftime('%b'))    #month
    write(4, 0, time.strftime('%d'))    #day of month
    write(8, 0, time.strftime('%H:'))   #hour
    write(11, 0, time.strftime('%M:'))  #minute

    while True:
        write(14, 0, time.strftime('%S'))#second
        time.sleep(1)

【问题讨论】:

  • 请在问题本身中包含代码,而不是粘贴库
  • 你需要cron,还是你的代码中的无限while循环好吗?
  • cron 不会超过分钟,所以你需要以不同的方式来做。
  • 他的代码里面有一个无限循环...
  • 是的,我希望这个脚本在 Pi 启动时运行,所以我把它放在 crontable 中。

标签: python cron raspberry-pi


【解决方案1】:

请使用这是您的解决方案

import time
import datetime
from RPLCD.gpio import CharLCD
from RPi import GPIO
GPIO.setmode (GPIO.BCM)
GPIO.setwarnings(False)
lcd = CharLCD(numbering_mode=GPIO.BCM, pin_rs=22, pin_rw=24, pin_e=23, pins_data=[26, 12, 16, 27],cols=16, rows=2,auto_linebreaks=True)
lcd.cursor_pos = (0,1) 
lcd.write_string(u'WELCOME  SAJANARORA517')
while 1:    
    lcd.cursor_pos =(1,10)
    lcd.write_string("%s" %time.strftime("%H:%M:%S")) 
    lcd.cursor_pos = (1,0)
    lcd.write_string("%s" %time.strftime("%d/%m/%y"))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    • 2019-03-03
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 2013-02-08
    相关资源
    最近更新 更多