通过其中一个ESP8266创建的网络将消息从一个ESP8266发送到另一个ESP8266

问题描述 投票:0回答:1

我得到了第一个的代码:

import network
import socket
from machine import Pin
import time

# LED pins 
led_pin = Pin(0, Pin.OUT) 
led_pin.on() 
led_pin2 = Pin(2, Pin.OUT) 
led_pin2.off() 
time.sleep(2) 
led_pin.off() 
led_pin2.on()

# Wyłączenie interfejsu AP, jeśli jest aktywny
ap = network.WLAN(network.AP_IF)  
ap.active(False)  

# Inicjalizacja nowego interfejsu AP i ustawienie konfiguracji
ap = network.WLAN(network.AP_IF)  
ap.active(True)  
ap.config(essid="Active", password="")  

print("Konfiguracja punktu dostępowego ustawiona. Adres IP punktu dostępowego:", ap.ifconfig()[0])

# Funkcja do odbierania komunikatów
def odbierz_dane():
    print("Nasłuchiwanie na połączenia...")
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # Inicjalizacja gniazda serwera
    server_socket.bind(('0.0.0.0', 8080))  # Powiązanie gniazda serwera z adresem IP i portem
    server_socket.listen(10)  # Nasłuchiwanie na przychodzące połączenia
    print("Serwer nasłuchuje na porcie 8080")

    while True:
        conn, addr = server_socket.accept()  # Akceptacja połączenia
        print('Połączenie z: %s' % str(addr))

        request = conn.recv(1024)  # Odbieranie danych
        received_data = request.decode('utf-8')
        print('Odebrano: %s' % received_data)

        if received_data == "alarm":
            print("Potrzebna pomoc")
            led_pin.on()

        conn.close()  # Zamknięcie połączenia

# Uruchomienie funkcji do odbierania komunikatów automatycznie po restarcie/podłączeniu do zasilania
print("Uruchamianie funkcji odbierania danych...")
odbierz_dane()

这部分效果很好(我认为是这样)

更大的问题是第二个微控制器,它应该向第一个微控制器发送“警报”消息

我有这样的代码:

import network
import socket
import time

# Funkcja do wysyłania komunikatu
def wyslij_alarm():
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    addr = ('192.168.4.1', 8080)  # Adres IP i port pierwszej płyty
    try:
        client_socket.connect(addr)  # Próba połączenia z pierwszą płytą
    except OSError as e:
        print("Błąd podczas łączenia z serwerem: %s" % str(e))
        return

    try:
        message = "alarm"
        client_socket.send(message.encode('utf-8'))  # Wysłanie komunikatu
        print("Wysłano komunikat: %s" % message)
    except Exception as e:
        print("Błąd podczas wysyłania komunikatu: %s" % str(e))
    finally:
        client_socket.close()  # Zamknięcie gniazda klienta

# Połączenie z punktem dostępowym
sta = network.WLAN(network.STA_IF)
sta.active(True)
sta.connect("Active", "")  # SSID i hasło punktu dostępowego

while not sta.isconnected():
    time.sleep(1)

print("Połączono z punktem dostępowym. Adres IP klienta:", sta.ifconfig()[0])

# Wysłanie komunikatu "alarm" do pierwszej płyty
wyslij_alarm()

但无论我尝试什么,我总是发现它已连接网络并尝试发送消息:[Errno 103] ECONNABORTED

esp8266 micropython esp8266wifi
1个回答
0
投票

我发现很愚蠢但有效的方法 一个 esp8266 每 10 秒尝试连接到给定名称的 wifi,当你想发送信号时,你创建这个 wifi

© www.soinside.com 2019 - 2024. All rights reserved.