В рамках данного проекта вы узнаете, как отправлять информацию между Raspberry Pi Pico W куда угодно, используя MQTT и MicroPython. Вы сможете отправлять сообщения между несколькими Raspberry Pi Pico W для создания настоящей распределенной системы Интернета вещей (IoT). Это может быть важным для широкого спектра приложений в бытовой и промышленной электронике.

Для начала необходимо разрешить несколько экземпляров в Thonny. Для этого откройте Thonny и перейдите в Tools - Options – General и снимите флажок Allow only single Thonny instance.

Перезапустите Thonny, чтобы активировать это. Вам не нужно этого делать, если у вас есть Thonny на другом компьютере, это нужно только в том случае, если вы хотите подключить более одного Pico W к одному компьютеру. Тем не менее, как только вы активируете данную настройку, вы просто захотите открыть другой экземпляр Thonny. Чтобы открыть другой экземпляр на Mac, перейдите в Терминал и запустите следующий код:
/applications/Thonny.app/Contents/MacOS/thonnyПосле запуска вы должны увидеть всплывающее окно другого экземпляра Thonny. Если вы используете Windows или Linux, процесс немного отличается. Вы можете открыть cmd и сделать что-то подобное или дважды коснуться приложения, чтобы открыть другой экземпляр. После этого вы можете выбрать соответствующее устройство в соответствующих экземплярах Thonny. Если у вас есть устройства, подключенные к вашему компьютеру, вы сможете подключить оба устройства на отдельных экранах.
Далее перейдем к настройке MQTT-клиента HiveMQ. Теперь вам нужно будет использовать MQTT (транспорт телеметрии очереди сообщений) для обработки информации, которую вы отправляете между устройствами. MQTT – это упрощенный протокол обмена сообщениями, разработанный для эффективной связи между устройствами в среде Интернета вещей (IoT). Он следует модели публикации-подписки, в которой устройства могут публиковать сообщения в определенных темах, а другие устройства могут подписываться на эти темы для получения сообщений. Легкий характер MQTT делает его идеальным для ограниченных сред с ограниченной пропускной способностью или вычислительной мощностью.
Чтобы облегчить связь MQTT, вы можете использовать HiveMQ с MicroPython для доступа к их облачной инфраструктуре. HiveMQ – популярный брокер MQTT, который действует как центральный узел для маршрутизации сообщений между устройствами. Он обеспечивает надежную доставку сообщений и предоставляет расширенные функции, такие как аутентификация, контроль доступа и сохранение сообщений. HiveMQ обеспечивает плавную интеграцию MQTT в вашу экосистему IoT, позволяя устройствам взаимодействовать друг с другом безопасным и масштабируемым образом. Он упрощает управление инфраструктурой MQTT и предоставляет надежное решение для создания отказоустойчивых и быстро реагирующих приложений IoT. Внедряя MQTT и используя такие инструменты, как HiveMQ, вы можете создать надежную и эффективную коммуникационную структуру для ваших устройств IoT, позволяя им беспрепятственно обмениваться информацией и позволяя создавать мощные и взаимосвязанные приложения IoT.
Для начала работы перейдите на https://www.hivemq.com/mqtt-cloud-broker/ и нажмите «Try out for free». Перейдите на https://console.hivemq.cloud/. Создайте кластер и введите имя пользователя и пароль на вкладке управления доступом. Сохраните имя пользователя, пароль и URL-адрес кластера, поскольку они понадобятся вам в библиотеке micropython. Теперь у вас есть брокер, готовый обрабатывать ваши сообщения.
На все Pico W добавьте следующий код библиотеки: simple.py (https://github.com/micropython/micropython-lib/blob/master/micropython/umqtt.simple/umqtt/simple.py) и robust.py (https://github.com/micropython/micropython-lib/tree/master/micropython/umqtt.robust/umqtt). Этот код позволит вам легко публиковать и подписываться на темы от брокера MQTT через Интернет. На одном Pico W запустите следующий код:
import network
import time
import random
from umqtt.robust import MQTTClient
import constants
def connectMQTT():
'''Connects to Broker'''
client = MQTTClient(
client_id=b"digitrode",
server=constants.SERVER_HOSTNAME,
port=0,
user=constants.USER,
password=constants.PASSWORD,
keepalive=7200,
ssl=True,
ssl_params={'server_hostname': constants.SERVER_HOSTNAME}
)
client.connect()
return client
def connect_to_internet(ssid, password):
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)
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)
if wlan.status() != 3:
print(wlan.status())
raise RuntimeError('network connection failed')
else:
print('connected')
print(wlan.status())
status = wlan.ifconfig()
def make_connections():
connect_to_internet(constants.INTERNET_NAME, constants.INTERNET_PASSWORD)
return connectMQTT()
def publish(topic, value, client):
'''Sends data to the broker'''
print(topic)
print(value)
client.publish(topic, value)
print("Publish Done")
client = make_connections()
while True:
publish('Topic', 'test _message', client)
time.sleep(1)
Некоторые примечания об этом коде. Данный код публикует данные в теме под названием «Topic» в HiveMQ, отправляя одно и то же сообщение каждую секунду. Вы можете изменить их в зависимости от вашего приложения Вам нужно будет заменить константы соответственно Идентификатор клиента не обязательно должен быть «digitrode». Если все ваши константы заполнены правильно, это должно легко работать на вашем первом устройстве.
На другом вашем устройстве мы хотим подписаться на тему и проверить, получаем ли мы сообщения. Для этого запустите следующий код на другом устройстве:
import network
import time
from umqtt.simple import MQTTClient
import constants
def connectMQTT():
'''Connects to Broker'''
client = MQTTClient(
client_id=b"other client",
server=constants.SERVER_HOSTNAME,
port=0,
user=constants.USER,
password=constants.PASSWORD,
keepalive=7200,
ssl=True,
ssl_params={'server_hostname': constants.SERVER_HOSTNAME}
)
client.connect()
return client
def connect_to_internet(ssid, password):
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)
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)
if wlan.status() != 3:
print(wlan.status())
raise RuntimeError('network connection failed')
else:
print('connected')
print(wlan.status())
status = wlan.ifconfig()
def make_connections():
connect_to_internet(constants.INTERNET_NAME, constants.INTERNET_PASSWORD)
return connectMQTT()
def my_callback(topic, response):
print("Received message on topic:", topic)
print("Response:", response)
def subscribe(topic, client):
'''Recieves data from the broker'''
client.subscribe(topic)
print("Subscribe Done")
client = make_connections()
client.set_callback(my_callback)
subscribe('Topic', client)
while True:
time.sleep(5)
client.check_msg()
Данный код просто читает из темы, которую мы создали, ему нужна функция обратного вызова для библиотеки, чтобы он мог соответствующим образом отображать сообщения. Обязательно измените идентификатор клиента, чтобы он отличался от вашего первого клиента, иначе вы получите сообщение об ошибке. Если вы настроите все правильно, вы должны начать видеть сообщения на консоли дисплея через каждый интервал.
© digitrode.ru