Связь нескольких микроконтроллерных плат Raspberry Pico W, обладающих возможностями беспроводной связи, может быть необходимо в проектах с распределенными системами для передачи данных между ними.

В рамках данного проекта мы реализуем передачу данных между двумя микроконтроллерными платами Raspberry Pico W.
Для начала разрешим несколько экземпляров Thonny. Для этого откройте Thonny и перейдите в Tools - Options - General и снимите флажок «Allow only single Thonny instance».

Перезапустите Thonny, чтобы активировать это обновление настроек. Откройте другой экземпляр Thonny. Чтобы открыть другой экземпляр на Mac, перейдите в Терминал и запустите следующий код:
/applications/Thonny.app/Contents/MacOS/thonnyПосле запуска вы должны увидеть всплывающее окно другого экземпляра Thonny. Если вы используете Windows или Linux, процесс немного отличается. Вы можете открыть cmd и сделать что-то подобное или дважды коснуться приложения, чтобы открыть другой экземпляр. После этого вы можете выбрать соответствующее устройство в соответствующих экземплярах Thonny. Если у вас есть устройства, подключенные к вашему компьютеру, вы сможете подключить оба устройства на отдельных экранах.
Отправим сообщения между устройствами. В одном экземпляре запустите следующий код сервера, вы можете выбрать либо Pico W, чтобы сделать это.
from machine import Pin, ADC
import network
import random
import socket
import time
import constants
# Just making our internet connection
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(constants.INTERNET_NAME, constants.INTERNET_PASSWORD)
# Wait for connect or fail
max_wait = 10
while max_wait > 0:
if wlan.status() < 0 or wlan.status() >= 3:
break
max_wait -= 1
print('waiting for connection...')
time.sleep(1)
# Handle connection error
if wlan.status() != 3:
raise RuntimeError('network connection failed')
else:
print('connected')
status = wlan.ifconfig()
#print('ip = ' + status[0])
# Open socket
addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]
s = socket.socket()
s.bind(addr)
s.listen(1)
print('listening on', addr)
# Listen for connections
while True:
try:
cl, addr = s.accept()
request = cl.recv(1024)
print(request)
# No need to unpack request in this example
ran_num = str(random.randint(0, 100))
cl.send(ran_num)
print("Sent: " + ran_num)
cl.close()
except OSError as e:
cl.close()
print('connection closed')
В другом экземпляре запустите клиентский код и выберите другой Pico W, чтобы сделать это.
from machine import Pin, ADC
import network
import random
import socket
import time
import constants
# Just making our internet connection
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(constants.INTERNET_NAME, constants.INTERNET_PASSWORD)
# Wait for connect or fail
max_wait = 10
while max_wait > 0:
if wlan.status() < 0 or wlan.status() >= 3:
break
max_wait -= 1
print('waiting for connection...')
time.sleep(1)
# Handle connection error
if wlan.status() != 3:
raise RuntimeError('network connection failed')
else:
print('connected')
status = wlan.ifconfig()
#print('ip = ' + status[0])
while True:
ai = socket.getaddrinfo(<Change this>, 80) # Address of Web Server
addr = ai[0][-1]
# Create a socket and make a HTTP request
s = socket.socket() # Open socket
s.connect(addr)
s.send(b"Anything") # Send request
ss=str(s.recv(512)) # Store reply
print(ss)
# Set RGB LED here
s.close()
time.sleep(0.2)
Код просто отправляет сообщение между клиентом и сервером, обязательно измените адрес веб-сервера. Вы можете получить это, раскомментировав код на сервере #print('ip = ' + status[0]). Если вы все настроили правильно, вы должны начать видеть случайные числа, отправляемые клиенту. Проект может быть распространен на ваши собственные приложения.
© digitrode.ru