Seite 1 von 1

Telegram Bot auf LCD

Verfasst: Donnerstag 5. November 2020, 16:12
von staju011
Hallo,

Ich nutze gerade einen Raspi um mir mir Telegramnachrichten auf einem LCD Screen auszugeben.
Das funktioniert auch, aber nur für Nachrichten die ich ihm schicke. Ich würde gerne auch die Nachrichten ausgegeben bekommen, die andere Bots mir schicken.

Als Hintergrund: Ich betreibe mehrere Luftfilteranlagen und muss dazu verschiedene Sachen an verschiedenen Orten messen. Also schickt mir mein Raspi 1 (ein eigener Bot) bei Überschreitung eines gewissen Wertes eine Telegram Nachricht. Raspi 2(auch eine eigener Bot) tut das gleiche wie Bot 1. Beide Bots sind mit mir und ein paar Mitarbeitern in einer Gruppe. Sollte jetzt also was passieren bekommen alle die Nachricht. Das funktioniert soweit auch sehr gut!
Jetzt habe ich überlegt mir einen kleinen Status LCD Screen ins Büro zu machen. Dieser LCD Screen stammt von meinem Junior (ist glaube von Sunfounder oder so ähnlich) und ich habe mir den LCD Screen angeschlossen. Habe also einen weiteren Bot gestartet der auf dem Raspi LCD läuft. Dieser ist auch in der Gruppe mit den Mitarbeitern und den Bots. Sollte jetzt eine Nachricht kommen, soll der LCD Screen diese anzeigen.
Dies funktioniert auch... aber nur solange ich oder ein Mitarbeiter schreibt. Die Nachrichten der Bots werden nicht angezeigt. Konnte man es verstehen und hat damit jemand Erfahrung?

Code: Alles auswählen

#!/usr/bin/env python3

import time
import smbus
import telebot

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):
        
        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)

        
        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 BUS
#       BUS = smbus.SMBus(1)
        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) 

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


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

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


bot = telebot.TeleBot('12345678910111BLABLABLA')

@bot.message_handler(content_types=['text'])
def handle_text(message):

    init(0x27, 1)
    write(4, 0, message.from_user.first_name)
    write(0, 1, message.text)
bot.polling()