Начало -> PYTHON -> RS485 комуникация

Ползваният код е за връзка между Raspberry pi и ESP8266



Предварително е необходимо да се инсталира библиотека pigpio, ако няма да се ползват стандартните портове на распито. В случая използваме други портове. След изпращане на съобщението програмата изчаква за отговор и ако има го принтира на конзолата.



import pigpio
import time

TX_PIN = 24
RX_PIN = 23

CONTROL_PIN = 25  # Пин за управление на посоката (DE/RE)

BAUD = 9600

pi = pigpio.pi()

if not pi.connected:
    exit("Не може да се свърже с pigpio демона!")

# Конфигуриране на контролния пин
#pi.set_mode(RS485_CONTROL_PIN, pigpio.OUTPUT)
#pi.write(RS485_CONTROL_PIN, 0) # Начално състояние: Режим "Слушане"


def setup():
    pi.set_mode(TX_PIN, pigpio.OUTPUT)
    pi.set_mode(CONTROL_PIN, pigpio.OUTPUT)
    pi.write(CONTROL_PIN, 0) # Режим Слушане
    try:
        pi.bb_serial_read_close(RX_PIN)
    except:
        pass
    pi.bb_serial_read_open(RX_PIN, BAUD, 8)

def send_to_esp(message):
    """Изпращане към ESP8266"""
    data = (message + "\n").encode('utf-8') # Добавяме нов ред за по-лесно четене в ESP
    
    pi.write(CONTROL_PIN, 1) # TX Mode
    pi.wave_clear()
    pi.wave_add_serial(TX_PIN, BAUD, data)
    wid = pi.wave_create()
    
    if wid >= 0:
        pi.wave_send_once(wid)
        while pi.wave_tx_busy():
            time.sleep(0.001)
        
        # Важно за ESP8266: леко закъснение преди превключване
        time.sleep(0.005)
        pi.write(CONTROL_PIN, 0) # RX Mode
        pi.wave_delete(wid)

def read_from_esp():
    """Четене на отговор от ESP8266"""
    count, data = pi.bb_serial_read(RX_PIN)
    if count > 0:
        return data.decode('utf-8', errors='ignore').strip()
    return None

setup()

try:
    print("Комуникация с ESP8266 стартирана...")
    while True:
        msg = "HELLO"
        send_to_esp(msg)
        print("Пратено към ESP: " + msg)
        
        # Изчакване за отговор
        time.sleep(0.3)
        response = read_from_esp()
        if response:
            print(f"Отговор от ESP: {response}")
            
        time.sleep(2)

except KeyboardInterrupt:
    pi.bb_serial_read_close(RX_PIN)
    pi.stop()
Total views: 6 , Total comments: 0
Leave a comment
No comments

© Авторски права на scs3.eu Всички права са запазени. Проектиран и разработен от fibonachi@abv.bg 2021 - 2026.