Шлюз MQTT — сделан на основе Ethernet шлюза с модификацией программы, которое заставляет его работать как клиент MQTT. Начните с создания шлюза, следуя инструкциям Ethernet-шлюза.
Шлюз W5100 MQTT отправляет данные по радиосетям (или локальным датчикам) вашему брокеру MQTT. Узел также прослушивает MY_MQTT_TOPIC_PREFIX и отправляет эти сообщения в радио сеть.
Конфигурация
Эскиз шлюза MQTT содержит некоторую статическую конфигурацию, такую как ip- и номер порта. Замените эти значения, чтобы они соответствовали вашим требованиям перед загрузкой.
// Enable these if your MQTT broker requires usenrame/password //#define MY_MQTT_USER "username" //#define MY_MQTT_PASSWORD "password" // Enable MY_IP_ADDRESS here if you want a static ip address (no DHCP) #define MY_IP_ADDRESS 192,168,178,87 // If using static ip you need to define Gateway and Subnet address as well #define MY_IP_GATEWAY_ADDRESS 192,168,178,1 #define MY_IP_SUBNET_ADDRESS 255,255,255,0 // MQTT broker ip address or url. Define one or the other. //#define MY_CONTROLLER_URL_ADDRESS "m20.cloudmqtt.com" #define MY_CONTROLLER_IP_ADDRESS 192, 168, 178, 68 // The MQTT broker port to to open #define MY_PORT 1883
Пример MQTTGateway
Это полностью рабочий пример эскиза.
Шлюз MQTT также может быть собран на основе модуля ESP8266. См. Комментарии в коде MQTTClient.ino.
Дополнительные сведения о «Кнопке включения» и светодиодах см. В разделе Дополнительные параметры сборки.
Настройка и тестирование шлюза
Вы можете запустить шлюз MQTT в Ethernet Arduino + W5100 или в ESP8266. Подключите радио- и ethernet-модуль точно так же, как для обычного шлюза.
Заголовок похож на протокол последовательного порта. Вы должны определить предпочитаемую подписку и опубликовать префикс в эскизе. Заголовок описывается так: MY_MQTT_PUBLISH_TOPIC_PREFIX/FROM-NODE-ID/SENSOR-ID/CMD-TYPE/ACK-FLAG/SUB-TYPE
Подробнее о протоколе последовательного порта см. Здесь. Пример данных, полученных с вашего шлюза, может выглядеть следующим образом:
mygateway1-out/2/1/1/0/49
Если вы хотите отправить данные своим датчикам, используйте MY_MQTT_SUBSCRIBE_TOPIC_PREFIX, определенный в вашем эскизе. Должно выглядеть так (используя эскиз по умолчанию):
mygateway1-in/2/1/1/0/49
Вы можете протестировать свой шлюз, используя mosquitto в качестве брокера.
Убедитесь, что вы установили MY_IP_GATEWAY_ADDRESS в шлюзе, указали на ваш ip-адрес компьютера (в той же сети LAN).
Запустите брокер (команда запуска): > mosquitto
Теперь запустите свой шлюз, и вы должны увидеть что-то подобное в журнале шлюза. Обратите внимание, что у меня в моей радиосети есть датчик GPS, который все время передает данные на шлюз:
0;0;3;0;9;gateway started, id=0, parent=0, distance=0 0;0;3;0;9;Attempting MQTT connection... 0;0;3;0;9;MQTT connected 0;0;3;0;9;read: 2-2-0 s=1,c=1,t=49,pt=0,l=22,sg=0:55.722519;13.018120 0;0;3;0;9;Sending message on topic: mygateway1-out/2/1/1/0/49 0;0;3;0;9;read: 2-2-0 s=1,c=1,t=49,pt=0,l=22,sg=0:55.722519;13.018121 0;0;3;0;9;Sending message on topic: mygateway1-out/2/1/1/0/49
Подпишитесь на сообщения (в консоли другого компьютера) > mosquitto_sub -v -t 'mygateway1-out/#'
Вы должны увидеть сообщения, которые вы видели в журнале шлюза, как показано ниже:
mygateway1-out/2/1/1/0/49 55.722519;13.018121;13 mygateway1-out/2/1/1/0/49 55.722519;13.018114;12 mygateway1-out/2/1/1/0/49 55.722527;13.018120;11 mygateway1-out/2/1/1/0/49 55.722534;13.018122;10
Отправите (публично) сообщение в вашу радио сеть: > mosquitto_pub -t 'mygateway1-in/2/1/1/0/49' -m '0,29'