NodeMCU транслируется всем клиентам - PullRequest
0 голосов
/ 27 октября 2018

Я хочу передать запрос всем клиентам, которые подключены к моей точке доступа esp8266 12f

Я использовал это для создания соединения для каждого клиента, это означает, что если у вас 3 клиента, он создаст 3 соединения.

for mac,ip in pairs(wifi.ap.getclient()) do

   srv= net.createConnection(net.TCP, 0)
   srv:on("receive", function(client, b_response) srv:close() collectgarbage() end)
   srv:on("connection", function(client, b_request) client:send(request) end)
   srv:connect(80, ip)

end

Я попробовал широковещательный IP srv:connect(80, "255.255.255.255"), но ничего не было отправлено

Проблема: -

То, что я использовал, каждый srv будет перезаписывать предыдущий srv, поэтому я не могу получить ответ, если он был отложен, даже если я могу назвать каждое srv с другим именем, например srv_1, srv_2, srv_3 но это занимает слишком много памяти.

Что я хочу

Создать только одно соединение?

1 Ответ

0 голосов
/ 27 октября 2018

Ваш код использует TCP, который по своей сути представляет собой одно соединение, протокол точка-точка. Нет такого понятия, как «широковещательное» TCP-соединение. TCP просто не работает с помощью широковещательной рассылки. Это все равно что пытаться использовать машину как лодку.

Если вы отправляете небольшое количество информации, вы можете вместо этого попробовать UDP. Недостатки в том, что UDP ненадежен - вы не можете быть уверены, что ваше сообщение было получено - и вам понадобится намного больше кода для получения ответа, если вы его хотите, и вам нужно будет создать механизм надежности (ретрансляция если ответ не получен, обнаружите повторные передачи в случае, если ответ был отброшен), если вы заботитесь об этом.

Я бы порекомендовал вам ознакомиться с протоколом MQTT - он разработан для упрощения связи с несколькими клиентами. Это легковесные и MQTT-клиенты хорошо работают на процессорах NodeMCU и Arduino. Существует MQTT-клиент, встроенный в реализацию LUA NodeMCU .

Недостатком является то, что вам потребуется брокер MQTT, к которому будут подключаться все ваши NodeMCU. Брокер обычно работает на более мощном процессоре (Raspberry Pi - хороший выбор) или внешне в Интернете (Adafruit предлагает брокера на https://io.adafruit.com/),, хотя есть некоторые реализации, которые работают на ESP8266 .

...