цифровая электроника
вычислительная техника
встраиваемые системы

 
» » » Передача данных от одного Raspberry Pi Pico W к другому посредством MQTT



Передача данных от одного Raspberry Pi Pico W к другому посредством MQTT

Автор: Mike(admin) от 23-06-2023, 03:55

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


Передача данных от одного Raspberry Pi Pico W к другому посредством MQTT

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


Передача данных от одного Raspberry Pi Pico W к другому посредством MQTT

Перезапустите 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


Теги: Raspberry Pi Pico, MQTT, Интернет вещей




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий