Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

Увеличить количество подключенных устройств esp8266?

Тема в разделе "Пользовательские прошивки", создана пользователем filon543, 10 апр 2018.

Метки:
  1. filon543

    filon543 Новичок

    Сообщения:
    9
    Симпатии:
    0
    Подскажите пожалуйста, как увеличить количество подключаемых датчиков(ds18b20 или ...) и исполняемых устройств(Светодиод, реле, ....)??? Я совсем не программист, а с железом я разберусь.
    Спасибо !
    ДОПОЛНЕНИЕ:
    Думаю надо пояснить свой вопрос: Я приложил скейтч в котором надо что то добавить(я в программировании ....),ч тоб можно было подключить хотя бы 2, 3, 4 светика или реле(симисторы)и как то разделять показания для mqtt для разных ds18b20 (я знаю о том что их на одну шину можно цеплять много), но вот со скейтчем у меня проблема. Помогите, кому не сложно?
     

    Вложения:

    Последнее редактирование: 10 апр 2018
  2. nikolz

    nikolz Гуру

    Сообщения:
    3.999
    Симпатии:
    426
    датчики DS18B20 паяются на три провода и подключаются к оному пину. Число любое (разумное)
    Реле лучше заменять на симисторы (лучше в смысле управления мощностью нагрузки)
    увеличить с помощью расширителя портов ввода-вывода, например PCF8574,
    либо сдвиговым регистром с защелкой например 74HC595
     
  3. =AK=

    =AK= Гуру

    Сообщения:
    1.194
    Симпатии:
    100
    Заведите шину I2C, на это понадобится 2 пина. К этой шине можете подключать расширители ввода-вывода, АЦП, мастер шины 1-wire (например, DS2482-100) и т.д и т.п.
     
  4. filon543

    filon543 Новичок

    Сообщения:
    9
    Симпатии:
    0
    Думаю надо пояснить свой вопрос: Я приложил скейтч в котором надо что то добавить(я в программировании ....),ч тоб можно было подключить хотя бы 2, 3, 4 светика или реле(симисторы)и как то разделять показания для mqtt для разных ds18b20 (я знаю о том что их на одну шину можно цеплять много), но вот со скейтчем у меня проблема. Помогите, кому не сложно?
     
  5. filon543

    filon543 Новичок

    Сообщения:
    9
    Симпатии:
    0
    Думаю надо пояснить свой вопрос: Я приложил скейтч в котором надо что то добавить(я в программировании ....),ч тоб можно было подключить хотя бы 2, 3, 4 светика или реле(симисторы)и как то разделять показания для mqtt для разных ds18b20 (я знаю о том что их на одну шину можно цеплять много), но вот со скейтчем у меня проблема. Помогите, кому не сложно?
     
  6. filon543

    filon543 Новичок

    Сообщения:
    9
    Симпатии:
    0
    Думаю надо пояснить свой вопрос: Я приложил скейтч в котором надо что то добавить(я в программировании ....),ч тоб можно было подключить хотя бы 2, 3, 4 светика или реле(симисторы)и как то разделять показания для mqtt для разных ds18b20 (я знаю о том что их на одну шину можно цеплять много), но вот со скейтчем у меня проблема. Помогите, кому не сложно?
     
  7. filon543

    filon543 Новичок

    Сообщения:
    9
    Симпатии:
    0
    Код (Text):
    1.  
    2. // Светодиод подлкючен к 5 пину
    3. // Датчик температуры ds18b20 к 2 пину
    4.  
    5. #include <ESP8266WiFi.h>
    6. #include <PubSubClient.h>
    7. #include <OneWire.h>
    8. #include <DallasTemperature.h>
    9.  
    10. #define ONE_WIRE_BUS 2
    11. OneWire oneWire(ONE_WIRE_BUS);
    12. DallasTemperature sensors(&oneWire);
    13.  
    14. const char *ssid =  "AIRPORT";  // Имя вайфай точки доступа
    15. const char *pass =  "PASSWORD"; // Пароль от точки доступа
    16.  
    17. const char *mqtt_server = "server"; // Имя сервера MQTT
    18. const int mqtt_port = 11140; // Порт для подключения к серверу MQTT
    19. const char *mqtt_user = "Login"; // Логи от сервер
    20. const char *mqtt_pass = "Pass"; // Пароль от сервера
    21.  
    22. #define BUFFER_SIZE 100
    23.  
    24. bool LedState = false;
    25. int tm=300;
    26. float temp=0;
    27.  
    28. // Функция получения данных от сервера
    29.  
    30. void callback(const MQTT::ublish& pub)
    31. {
    32.   Serial.print(pub.topic());   // выводим в сериал порт название топика
    33.   Serial.print(" => ");
    34.   Serial.print(pub.payload_string()); // выводим в сериал порт значение полученных данных
    35.  
    36.   String payload = pub.payload_string();
    37.  
    38.   if(String(pub.topic()) == "test/led") // проверяем из нужного ли нам топика пришли данные
    39.   {
    40.   int stled = payload.toInt(); // преобразуем полученные данные в тип integer
    41.   digitalWrite(5,stled);  //  включаем или выключаем светодиод в зависимоти от полученных значений данных
    42.   }
    43. }
    44.  
    45.  
    46.  
    47. WiFiClient wclient;  
    48. PubSubClient client(wclient, mqtt_server, mqtt_port);
    49.  
    50. void setup() {
    51.  
    52.   sensors.begin();
    53.   Serial.begin(115200);
    54.   delay(10);
    55.   Serial.println();
    56.   Serial.println();
    57.   pinMode(5, OUTPUT);
    58. }
    59.  
    60. void loop() {
    61.   // подключаемся к wi-fi
    62.   if (WiFi.status() != WL_CONNECTED) {
    63.     Serial.print("Connecting to ");
    64.     Serial.print(ssid);
    65.     Serial.println("...");
    66.     WiFi.begin(ssid, pass);
    67.  
    68.     if (WiFi.waitForConnectResult() != WL_CONNECTED)
    69.       return;
    70.     Serial.println("WiFi connected");
    71.   }
    72.  
    73.   // подключаемся к MQTT серверу
    74.   if (WiFi.status() == WL_CONNECTED) {
    75.     if (!client.connected()) {
    76.       Serial.println("Connecting to MQTT server");
    77.       if (client.connect(MQTT::Connect("arduinoClient2")
    78.                          .set_auth(mqtt_user, mqtt_pass))) {
    79.         Serial.println("Connected to MQTT server");
    80.         client.set_callback(callback);
    81.         client.subscribe("test/led"); // подписывааемся по топик с данными для светодиода
    82.       } else {
    83.         Serial.println("Could not connect to MQTT server");
    84.       }
    85.     }
    86.  
    87.     if (client.connected()){
    88.       client.loop();
    89.       TempSend();
    90.   }
    91.  
    92. }
    93. } // конец основного цикла
    94.  
    95.  
    96. // Функция отправки показаний с термодатчика
    97. void TempSend(){
    98.   if (tm==0)
    99.   {
    100.   sensors.requestTemperatures();   // от датчика получаем значение температуры
    101.   float temp = sensors.getTempCByIndex(0);
    102.   client.publish("test/temp",String(temp)); // отправляем в топик для термодатчика значение температуры
    103.   Serial.println(temp);
    104.   tm = 300;  // пауза меду отправками значений температуры  коло 3 секунд
    105.   }
    106.   tm--;
    107.   delay(10);
    108. }
    109.  
     
  8. nikolz

    nikolz Гуру

    Сообщения:
    3.999
    Симпатии:
    426
    Не сложно - это как?
    Чтобы сделать всего много надо заново разработать программу отладить ее и потом еще отвечать,
    что куда вставлять толпе халявщиков.
    Ну и кто же такой дурной здесь есть?
     
  9. filon543

    filon543 Новичок

    Сообщения:
    9
    Симпатии:
    0
    Не сложно-это я про тех кто в теме, для кого текст этого небольшого скейтча, как записка от жены чего купить в магазине(все понятно что купить и сколько) .
    И прогу разрабатывать и проверять и отлаживать я не прошу, а прошу лиш указать на циклы которые нужно повторить в проге с изменениями(если я правильно понял прогу).
    И "дурных", как ты выразился я думаю тут не много, а вот разбирающихся думаю много.
    А таких "спецов" как ты я и не прошу помочь.
     
  10. tretyakov_sa

    tretyakov_sa Moderator Команда форума

    Сообщения:
    967
    Симпатии:
    150
    Вот так попробуйте для DS18B20, замените свою функцию:
    Код (C):
    1. // Функция отправки показаний с термодатчика
    2. void TempSend(){
    3.   if (tm==0)
    4.   {
    5.   sensors.requestTemperatures();   // от датчика получаем значение температуры
    6.    for (byte i = 0; i < sensors.getDeviceCount(); i++) {
    7.   float temp = sensors.getTempCByIndex(i);
    8.   String num;
    9.   num += i;
    10.   client.publish("test/temp"+num,String(temp)); // отправляем в топик для термодатчика значение температуры
    11.   Serial.print("test/temp"+num+"= ");
    12.   Serial.println(temp);
    13.   }
    14.   tm = 300;  // пауза меду отправками значений температуры  коло 3 секунд
    15.   }
    16.   tm--;
    17.   delay(10);
    18. }
     
    filon543 нравится это.
  11. filon543

    filon543 Новичок

    Сообщения:
    9
    Симпатии:
    0
    Спасибо вам за участие и помощь, но произошло только изменение топика на test/temp0 и все?
    Я подключал 2 - DS18B20 на одну шину, передаются на MQTT сервер только показания одного и в топик test/temp0?
    Если я правильно понял в вашем случае топики должны были с именами test/temp+1 в зависимости от количества подключенных датчиков?
    Но этого не происходит?
     
  12. tretyakov_sa

    tretyakov_sa Moderator Команда форума

    Сообщения:
    967
    Симпатии:
    150
    Я загрузил этот код:
    Код (C):
    1. // Светодиод подлкючен к 5 пину
    2. // Датчик температуры ds18b20 к 2 пину
    3.  
    4. #include <ESP8266WiFi.h>
    5. #include <PubSubClient.h>
    6. #include <OneWire.h>
    7. #include <DallasTemperature.h>
    8.  
    9. #define ONE_WIRE_BUS 5
    10. OneWire oneWire(ONE_WIRE_BUS);
    11. DallasTemperature sensors(&oneWire);
    12.  
    13. const char *ssid =  "AIRPORT";  // Имя вайфай точки доступа
    14. const char *pass =  "PASSWORD"; // Пароль от точки доступа
    15.  
    16. const char *mqtt_server = "server"; // Имя сервера MQTT
    17. const int mqtt_port = 11140; // Порт для подключения к серверу MQTT
    18. const char *mqtt_user = "Login"; // Логи от сервер
    19. const char *mqtt_pass = "Pass"; // Пароль от сервера
    20.  
    21. #define BUFFER_SIZE 100
    22.  
    23. bool LedState = false;
    24. int tm=300;
    25. float temp=0;
    26.  
    27. // Функция получения данных от сервера
    28.  
    29. void callback(const MQTT::Publish& pub)
    30. {
    31.   Serial.print(pub.topic());   // выводим в сериал порт название топика
    32.   Serial.print(" => ");
    33.   Serial.print(pub.payload_string()); // выводим в сериал порт значение полученных данных
    34.  
    35.   String payload = pub.payload_string();
    36.  
    37.   if(String(pub.topic()) == "test/led") // проверяем из нужного ли нам топика пришли данные
    38.   {
    39.   int stled = payload.toInt(); // преобразуем полученные данные в тип integer
    40.   digitalWrite(5,stled);  //  включаем или выключаем светодиод в зависимоти от полученных значений данных
    41.   }
    42. }
    43.  
    44.  
    45.  
    46. WiFiClient wclient;    
    47. PubSubClient client(wclient, mqtt_server, mqtt_port);
    48.  
    49. void setup() {
    50.  
    51.   sensors.begin();
    52.   Serial.begin(115200);
    53.   delay(10);
    54.   Serial.println();
    55.   Serial.println();
    56.   pinMode(5, OUTPUT);
    57. }
    58.  
    59. void loop() {
    60.   // подключаемся к wi-fi
    61.   if (WiFi.status() != WL_CONNECTED) {
    62.     Serial.print("Connecting to ");
    63.     Serial.print(ssid);
    64.     Serial.println("...");
    65.     WiFi.begin(ssid, pass);
    66.  
    67.     if (WiFi.waitForConnectResult() != WL_CONNECTED)
    68.       return;
    69.     Serial.println("WiFi connected");
    70.   }
    71.  
    72.   // подключаемся к MQTT серверу
    73.   if (WiFi.status() == WL_CONNECTED) {
    74.     if (!client.connected()) {
    75.       Serial.println("Connecting to MQTT server");
    76.       if (client.connect(MQTT::Connect("arduinoClient2")
    77.                          .set_auth(mqtt_user, mqtt_pass))) {
    78.         Serial.println("Connected to MQTT server");
    79.         client.set_callback(callback);
    80.         client.subscribe("test/led"); // подписывааемся по топик с данными для светодиода
    81.       } else {
    82.         Serial.println("Could not connect to MQTT server");  
    83.       }
    84.     }
    85.  
    86.     if (client.connected()){
    87.       client.loop();
    88.       TempSend();
    89.   }
    90.  
    91. }
    92. } // конец основного цикла
    93.  
    94.  
    95. // Функция отправки показаний с термодатчика
    96. void TempSend(){
    97.   if (tm==0)
    98.   {
    99.   sensors.requestTemperatures();   // от датчика получаем значение температуры
    100.    for (byte i = 0; i < sensors.getDeviceCount(); i++) {
    101.   float temp = sensors.getTempCByIndex(i);
    102.   String num;
    103.   num += i;
    104.   client.publish("test/temp"+num,String(temp)); // отправляем в топик для термодатчика значение температуры
    105.   Serial.print("test/temp"+num+"= ");
    106.   Serial.println(temp);
    107.     }
    108. tm = 300;  // пауза меду отправками значений температуры  коло 3 секунд
    109.   }
    110.   tm--;
    111.   delay(10);
    112. }
    Все работает проверил:
    upload_2018-4-11_23-25-38.png
     
    filon543 и andrik_zp нравится это.
  13. filon543

    filon543 Новичок

    Сообщения:
    9
    Симпатии:
    0
    Приветствую! А теперь заработало, вы что то исправили? Спасибо вам огромное, кстати у вас очень интересный канал, подписался!
    Знаете анекдот : Студент в деревне: Бабка дай пожалуйста воды попить, а то так жрать хочется аж но переночевать не где ....., а чем это я? аааа...
    Может еще подскажете как еще один или два или .... светика(реле, ....) подключить?
    Спасибо!
    p.s. Странно, но вроде ничего не изменилось, а теперь работает??
     
    Последнее редактирование: 12 апр 2018
  14. filon543

    filon543 Новичок

    Сообщения:
    9
    Симпатии:
    0
    Не получается подсказать, как еще один или два или .... светика(реле, ....) подключить?
     

Поделиться этой страницей