我得到了第一个的代码:
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 每 10 秒尝试连接到给定名称的 wifi,当你想发送信号时,你创建这个 wifi