• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

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

filon543

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

Вложения

Последнее редактирование:

nikolz

Well-known member
Подскажите пожалуйста, как увеличить количество подключаемых датчиков(ds18b20 или ...) и исполняемых устройств(Светодиод, реле, ....)??? Я совсем не программист, а с железом я разберусь.
Спасибо !
датчики DS18B20 паяются на три провода и подключаются к оному пину. Число любое (разумное)
Реле лучше заменять на симисторы (лучше в смысле управления мощностью нагрузки)
увеличить с помощью расширителя портов ввода-вывода, например PCF8574,
либо сдвиговым регистром с защелкой например 74HC595
 

=AK=

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

filon543

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

filon543

New member
датчики DS18B20 паяются на три провода и подключаются к оному пину. Число любое (разумное)
Реле лучше заменять на симисторы (лучше в смысле управления мощностью нагрузки)
увеличить с помощью расширителя портов ввода-вывода, например PCF8574,
либо сдвиговым регистром с защелкой например 74HC595
Думаю надо пояснить свой вопрос: Я приложил скейтч в котором надо что то добавить(я в программировании ....),ч тоб можно было подключить хотя бы 2, 3, 4 светика или реле(симисторы)и как то разделять показания для mqtt для разных ds18b20 (я знаю о том что их на одну шину можно цеплять много), но вот со скейтчем у меня проблема. Помогите, кому не сложно?
 

filon543

New member
датчики DS18B20 паяются на три провода и подключаются к оному пину. Число любое (разумное)
Реле лучше заменять на симисторы (лучше в смысле управления мощностью нагрузки)
увеличить с помощью расширителя портов ввода-вывода, например PCF8574,
либо сдвиговым регистром с защелкой например 74HC595
Думаю надо пояснить свой вопрос: Я приложил скейтч в котором надо что то добавить(я в программировании ....),ч тоб можно было подключить хотя бы 2, 3, 4 светика или реле(симисторы)и как то разделять показания для mqtt для разных ds18b20 (я знаю о том что их на одну шину можно цеплять много), но вот со скейтчем у меня проблема. Помогите, кому не сложно?
 

filon543

New member
Код:
// Светодиод подлкючен к 5 пину
// Датчик температуры ds18b20 к 2 пину

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

const char *ssid =  "AIRPORT";  // Имя вайфай точки доступа
const char *pass =  "PASSWORD"; // Пароль от точки доступа

const char *mqtt_server = "server"; // Имя сервера MQTT
const int mqtt_port = 11140; // Порт для подключения к серверу MQTT
const char *mqtt_user = "Login"; // Логи от сервер
const char *mqtt_pass = "Pass"; // Пароль от сервера

#define BUFFER_SIZE 100

bool LedState = false;
int tm=300;
float temp=0;

// Функция получения данных от сервера

void callback(const MQTT::ublish& pub)
{
  Serial.print(pub.topic());   // выводим в сериал порт название топика
  Serial.print(" => ");
  Serial.print(pub.payload_string()); // выводим в сериал порт значение полученных данных

  String payload = pub.payload_string();

  if(String(pub.topic()) == "test/led") // проверяем из нужного ли нам топика пришли данные
  {
  int stled = payload.toInt(); // преобразуем полученные данные в тип integer
  digitalWrite(5,stled);  //  включаем или выключаем светодиод в зависимоти от полученных значений данных
  }
}



WiFiClient wclient;   
PubSubClient client(wclient, mqtt_server, mqtt_port);

void setup() {

  sensors.begin();
  Serial.begin(115200);
  delay(10);
  Serial.println();
  Serial.println();
  pinMode(5, OUTPUT);
}

void loop() {
  // подключаемся к wi-fi
  if (WiFi.status() != WL_CONNECTED) {
    Serial.print("Connecting to ");
    Serial.print(ssid);
    Serial.println("...");
    WiFi.begin(ssid, pass);

    if (WiFi.waitForConnectResult() != WL_CONNECTED)
      return;
    Serial.println("WiFi connected");
  }

  // подключаемся к MQTT серверу
  if (WiFi.status() == WL_CONNECTED) {
    if (!client.connected()) {
      Serial.println("Connecting to MQTT server");
      if (client.connect(MQTT::Connect("arduinoClient2")
                         .set_auth(mqtt_user, mqtt_pass))) {
        Serial.println("Connected to MQTT server");
        client.set_callback(callback);
        client.subscribe("test/led"); // подписывааемся по топик с данными для светодиода
      } else {
        Serial.println("Could not connect to MQTT server"); 
      }
    }

    if (client.connected()){
      client.loop();
      TempSend();
  }

}
} // конец основного цикла


// Функция отправки показаний с термодатчика
void TempSend(){
  if (tm==0)
  {
  sensors.requestTemperatures();   // от датчика получаем значение температуры
  float temp = sensors.getTempCByIndex(0);
  client.publish("test/temp",String(temp)); // отправляем в топик для термодатчика значение температуры
  Serial.println(temp);
  tm = 300;  // пауза меду отправками значений температуры  коло 3 секунд
  }
  tm--;
  delay(10);
}
 

nikolz

Well-known member
Думаю надо пояснить свой вопрос: Я приложил скейтч в котором надо что то добавить(я в программировании ....),ч тоб можно было подключить хотя бы 2, 3, 4 светика или реле(симисторы)и как то разделять показания для mqtt для разных ds18b20 (я знаю о том что их на одну шину можно цеплять много), но вот со скейтчем у меня проблема. Помогите, кому не сложно?
Не сложно - это как?
Чтобы сделать всего много надо заново разработать программу отладить ее и потом еще отвечать,
что куда вставлять толпе халявщиков.
Ну и кто же такой дурной здесь есть?
 

filon543

New member
Не сложно - это как?
Чтобы сделать всего много надо заново разработать программу отладить ее и потом еще отвечать,
что куда вставлять толпе халявщиков.
Ну и кто же такой дурной здесь есть?
Не сложно-это я про тех кто в теме, для кого текст этого небольшого скейтча, как записка от жены чего купить в магазине(все понятно что купить и сколько) .
И прогу разрабатывать и проверять и отлаживать я не прошу, а прошу лиш указать на циклы которые нужно повторить в проге с изменениями(если я правильно понял прогу).
И "дурных", как ты выразился я думаю тут не много, а вот разбирающихся думаю много.
А таких "спецов" как ты я и не прошу помочь.
 

tretyakov_sa

Moderator
Команда форума
Подскажите пожалуйста, как увеличить количество подключаемых датчиков(ds18b20 или ...) и исполняемых устройств(Светодиод, реле, ....)??? Я совсем не программист, а с железом я разберусь.
Вот так попробуйте для DS18B20, замените свою функцию:
Код:
// Функция отправки показаний с термодатчика
void TempSend(){
  if (tm==0)
  {
  sensors.requestTemperatures();   // от датчика получаем значение температуры
   for (byte i = 0; i < sensors.getDeviceCount(); i++) {
  float temp = sensors.getTempCByIndex(i);
  String num;
  num += i;
  client.publish("test/temp"+num,String(temp)); // отправляем в топик для термодатчика значение температуры
  Serial.print("test/temp"+num+"= ");
  Serial.println(temp); 
  }
  tm = 300;  // пауза меду отправками значений температуры  коло 3 секунд
  }
  tm--;
  delay(10); 
}
 

filon543

New member
Вот так попробуйте для DS18B20, замените свою функцию:
Код:
// Функция отправки показаний с термодатчика
void TempSend(){
  if (tm==0)
  {
  sensors.requestTemperatures();   // от датчика получаем значение температуры
   for (byte i = 0; i < sensors.getDeviceCount(); i++) {
  float temp = sensors.getTempCByIndex(i);
  String num;
  num += i;
  client.publish("test/temp"+num,String(temp)); // отправляем в топик для термодатчика значение температуры
  Serial.print("test/temp"+num+"= ");
  Serial.println(temp);
  }
  tm = 300;  // пауза меду отправками значений температуры  коло 3 секунд
  }
  tm--;
  delay(10);
}
Спасибо вам за участие и помощь, но произошло только изменение топика на test/temp0 и все?
Я подключал 2 - DS18B20 на одну шину, передаются на MQTT сервер только показания одного и в топик test/temp0?
Если я правильно понял в вашем случае топики должны были с именами test/temp+1 в зависимости от количества подключенных датчиков?
Но этого не происходит?
 

tretyakov_sa

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

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 5
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

const char *ssid =  "AIRPORT";  // Имя вайфай точки доступа
const char *pass =  "PASSWORD"; // Пароль от точки доступа

const char *mqtt_server = "server"; // Имя сервера MQTT
const int mqtt_port = 11140; // Порт для подключения к серверу MQTT
const char *mqtt_user = "Login"; // Логи от сервер
const char *mqtt_pass = "Pass"; // Пароль от сервера

#define BUFFER_SIZE 100

bool LedState = false;
int tm=300;
float temp=0;

// Функция получения данных от сервера

void callback(const MQTT::Publish& pub)
{
  Serial.print(pub.topic());   // выводим в сериал порт название топика
  Serial.print(" => ");
  Serial.print(pub.payload_string()); // выводим в сериал порт значение полученных данных
 
  String payload = pub.payload_string();
 
  if(String(pub.topic()) == "test/led") // проверяем из нужного ли нам топика пришли данные
  {
  int stled = payload.toInt(); // преобразуем полученные данные в тип integer
  digitalWrite(5,stled);  //  включаем или выключаем светодиод в зависимоти от полученных значений данных
  }
}



WiFiClient wclient;     
PubSubClient client(wclient, mqtt_server, mqtt_port);

void setup() {
 
  sensors.begin();
  Serial.begin(115200);
  delay(10);
  Serial.println();
  Serial.println();
  pinMode(5, OUTPUT);
}

void loop() {
  // подключаемся к wi-fi
  if (WiFi.status() != WL_CONNECTED) {
    Serial.print("Connecting to ");
    Serial.print(ssid);
    Serial.println("...");
    WiFi.begin(ssid, pass);

    if (WiFi.waitForConnectResult() != WL_CONNECTED)
      return;
    Serial.println("WiFi connected");
  }

  // подключаемся к MQTT серверу
  if (WiFi.status() == WL_CONNECTED) {
    if (!client.connected()) {
      Serial.println("Connecting to MQTT server");
      if (client.connect(MQTT::Connect("arduinoClient2")
                         .set_auth(mqtt_user, mqtt_pass))) {
        Serial.println("Connected to MQTT server");
        client.set_callback(callback);
        client.subscribe("test/led"); // подписывааемся по топик с данными для светодиода
      } else {
        Serial.println("Could not connect to MQTT server");  
      }
    }

    if (client.connected()){
      client.loop();
      TempSend();
  }
 
}
} // конец основного цикла


// Функция отправки показаний с термодатчика
void TempSend(){
  if (tm==0)
  {
  sensors.requestTemperatures();   // от датчика получаем значение температуры
   for (byte i = 0; i < sensors.getDeviceCount(); i++) {
  float temp = sensors.getTempCByIndex(i);
  String num;
  num += i;
  client.publish("test/temp"+num,String(temp)); // отправляем в топик для термодатчика значение температуры
  Serial.print("test/temp"+num+"= ");
  Serial.println(temp);
    }
tm = 300;  // пауза меду отправками значений температуры  коло 3 секунд
  }
  tm--;
  delay(10); 
}
Все работает проверил:
upload_2018-4-11_23-25-38.png
 

filon543

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

filon543

New member
Не получается подсказать, как еще один или два или .... светика(реле, ....) подключить?
 
Сверху Снизу