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

Нужна помощь подключение OLED дисплея к WeMos D1R1

Тема в разделе "Раздел для начинающих", создана пользователем Антон Витальевич, 1 дек 2019.

  1. Антон Витальевич

    Антон Витальевич Новичок

    Сообщения:
    11
    Симпатии:
    0
    Доброго времени суток уважаемое сообщество, нужна ваша помощь ибо сам только учусь и знаний не хватает, имеем железо WeMos D1R1 на ESP8266, датчик температуры DS18b20 релейный модуль на 8 реле все подключено и настроено через Blynk, температуру отображает реле работают но возникла необходимость подключения визуального отображения температуры на OLED 0.91 I2C привожу пример прошивки помогите интегрировать дисплей.

    Код (Text):
    1. #include <ArduinoOTA.h>
    2. #include <ESP8266WiFi.h>
    3. #include <BlynkSimpleEsp8266.h>
    4. #include <OneWire.h>
    5. #include <DallasTemperature.h>
    6. #define Relay2 14 //пин реле
    7. boolean tr = true; //назначаем логическую переменную для однократной отправки сообщения о температуре
    8. // персональные данные
    9. char auth[] = "********"; //токен
    10. char ssid[] = "*****";  //Имя точки доступа WIFI
    11. char pass[] = "*******"; //пароль точки доступа WIFI
    12. #define ONE_WIRE_BUS D3 // пин датчика d18b20
    13. OneWire oneWire(ONE_WIRE_BUS);
    14. DallasTemperature sensors(&oneWire);
    15. BlynkTimer timer1;
    16. float temp2; //переменная температуры
    17. int tempConst2 = 10; //температура по умолчанию
    18. int gistT = 1; //задаем дельту
    19. float i; //показания датчика тока
    20. float I; //сила тока
    21. void sendTemps(){   //проверка температуры
    22.   sensors.requestTemperatures();
    23.   temp2 = sensors.getTempCByIndex(0);
    24.   Serial.println(temp2);
    25.   Blynk.virtualWrite(V1, temp2);
    26. }
    27. BLYNK_WRITE(V4){    //считываем данные со слайдера
    28.   tempConst2 = param.asInt();
    29. }
    30. void checktemp(){   //сравниваем заданную и текущую температуру
    31.   if (temp2 >= tempConst2 + gistT) //если температура в норме
    32.   {
    33.     digitalWrite(Relay2, HIGH); //выключаем реле
    34.     Serial.println(tempConst2);
    35.     if (tr == true)
    36.     {
    37.       Blynk.email("*****@etlgr.com", "Температура в норме", " ");
    38.       Serial.println("_HIGH_");
    39.       tr = false; //присваиваем переменной обратное значение чтобы сообщение больше не отправлялось
    40.     }
    41.   }
    42.   else if (temp2 <= tempConst2 - gistT) // если температура нниже
    43.   {
    44.     digitalWrite(Relay2, LOW); //включаем реле
    45.     Serial.println(tempConst2);
    46.     if (tr == false) // проверяем логическую переменную
    47.     {
    48.       Blynk.email("*****@etlgr.com", "Низкая температура", " ");
    49.       Serial.println("_LOW_");
    50.       tr = true; //меняем значение переменной чтобы больше не отправлялось сообщение
    51.     }
    52.   }
    53. }
    54. void amper(){       //датчик силы тока
    55.   i = analogRead(A0);
    56.   I = (i - 491) / 12,178;
    57.   if (I < 0){
    58.     I = I * - 1;
    59.   }
    60.   Serial.println(I);
    61.   Blynk.virtualWrite(V2, I);
    62. }
    63. void setup(){       //настройки
    64.   pinMode(Relay2, OUTPUT);        // пин реле выход
    65.   Serial.begin(9600);             // скорость сериал порта
    66.   Blynk.begin(auth, ssid, pass);  //старт блинка
    67.   Blynk.syncAll();                // синхронизация блинка
    68.   sensors.begin();                // старт датчика температуры
    69.   ArduinoOTA.begin();             // старт обновления по воздуху
    70.   // Таймеры на запуск функций
    71.   timer1.setInterval(3000L, sendTemps); //опрос d18b20
    72.   timer1.setInterval(3000L, checktemp); //сравнение текущей температуры с заданой
    73.   timer1.setInterval(1000L, amper);     //амперметр
    74. }
    75. void loop(){
    76.   ArduinoOTA.handle();
    77.   Blynk.run();
    78.   timer1.run();
    79. }
     
  2. Сергей_Ф

    Сергей_Ф Moderator Команда форума

    Сообщения:
    2.230
    Симпатии:
    229
    @Антон Витальевич а что такое у вас релейный модуль на 8 реле? В скетче вижу только одно. И в чем проблема посмотреть примеры Ардуино по подключению этого экрана?
     
  3. Антон Витальевич

    Антон Витальевич Новичок

    Сообщения:
    11
    Симпатии:
    0
    в скетче одно реле управляется непосредственно с датчика температуры, остальные с приложения Blynk. Этот скетч я путем проб и ощибок склеил из примеров и он слава богу работает, вот с дисплеем не получается.
     
  4. alexlaw

    alexlaw Новичок

    Сообщения:
    105
    Симпатии:
    2
    wemosD1_mini_SSD1306 (раскрыть)
    Код (Text):
    1. //Wemos D1 Мини
    2. #define SSD1306_ADDRESS            0x3C
    3. //SSD1306 128x64
    4. #define SSD1306_COLUMN             20
    5. #define SSD1306_LINE               8
    6. #include <Wire.h>
    7. // Character set - stored in program memory
    8. const uint8_t CharMap[96][6] PROGMEM = {
    9. { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
    10. { 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00 },
    11. { 0x00, 0x07, 0x00, 0x07, 0x00, 0x00 },
    12. { 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00 },
    13. { 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00 },
    14. { 0x23, 0x13, 0x08, 0x64, 0x62, 0x00 },
    15. { 0x36, 0x49, 0x56, 0x20, 0x50, 0x00 },
    16. { 0x00, 0x08, 0x07, 0x03, 0x00, 0x00 },
    17. { 0x00, 0x1C, 0x22, 0x41, 0x00, 0x00 },
    18. { 0x00, 0x41, 0x22, 0x1C, 0x00, 0x00 },
    19. { 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00 },
    20. { 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00 },
    21. { 0x00, 0x80, 0x70, 0x30, 0x00, 0x00 },
    22. { 0x08, 0x08, 0x08, 0x08, 0x08, 0x00 },
    23. { 0x00, 0x00, 0x60, 0x60, 0x00, 0x00 },
    24. { 0x20, 0x10, 0x08, 0x04, 0x02, 0x00 },
    25. { 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00 },
    26. { 0x00, 0x42, 0x7F, 0x40, 0x00, 0x00 },
    27. { 0x72, 0x49, 0x49, 0x49, 0x46, 0x00 },
    28. { 0x21, 0x41, 0x49, 0x4D, 0x33, 0x00 },
    29. { 0x18, 0x14, 0x12, 0x7F, 0x10, 0x00 },
    30. { 0x27, 0x45, 0x45, 0x45, 0x39, 0x00 },
    31. { 0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00 },
    32. { 0x41, 0x21, 0x11, 0x09, 0x07, 0x00 },
    33. { 0x36, 0x49, 0x49, 0x49, 0x36, 0x00 },
    34. { 0x46, 0x49, 0x49, 0x29, 0x1E, 0x00 },
    35. { 0x00, 0x00, 0x14, 0x00, 0x00, 0x00 },
    36. { 0x00, 0x40, 0x34, 0x00, 0x00, 0x00 },
    37. { 0x00, 0x08, 0x14, 0x22, 0x41, 0x00 },
    38. { 0x14, 0x14, 0x14, 0x14, 0x14, 0x00 },
    39. { 0x00, 0x41, 0x22, 0x14, 0x08, 0x00 },
    40. { 0x02, 0x01, 0x59, 0x09, 0x06, 0x00 },
    41. { 0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00 },
    42. { 0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00 },
    43. { 0x7F, 0x49, 0x49, 0x49, 0x36, 0x00 },
    44. { 0x3E, 0x41, 0x41, 0x41, 0x22, 0x00 },
    45. { 0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00 },
    46. { 0x7F, 0x49, 0x49, 0x49, 0x41, 0x00 },
    47. { 0x7F, 0x09, 0x09, 0x09, 0x01, 0x00 },
    48. { 0x3E, 0x41, 0x41, 0x51, 0x73, 0x00 },
    49. { 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00 },
    50. { 0x00, 0x41, 0x7F, 0x41, 0x00, 0x00 },
    51. { 0x20, 0x40, 0x41, 0x3F, 0x01, 0x00 },
    52. { 0x7F, 0x08, 0x14, 0x22, 0x41, 0x00 },
    53. { 0x7F, 0x40, 0x40, 0x40, 0x40, 0x00 },
    54. { 0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00 },
    55. { 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00 },
    56. { 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00 },
    57. { 0x7F, 0x09, 0x09, 0x09, 0x06, 0x00 },
    58. { 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00 },
    59. { 0x7F, 0x09, 0x19, 0x29, 0x46, 0x00 },
    60. { 0x26, 0x49, 0x49, 0x49, 0x32, 0x00 },
    61. { 0x03, 0x01, 0x7F, 0x01, 0x03, 0x00 },
    62. { 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00 },
    63. { 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00 },
    64. { 0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00 },
    65. { 0x63, 0x14, 0x08, 0x14, 0x63, 0x00 },
    66. { 0x03, 0x04, 0x78, 0x04, 0x03, 0x00 },
    67. { 0x61, 0x59, 0x49, 0x4D, 0x43, 0x00 },
    68. { 0x00, 0x7F, 0x41, 0x41, 0x41, 0x00 },
    69. { 0x02, 0x04, 0x08, 0x10, 0x20, 0x00 },
    70. { 0x00, 0x41, 0x41, 0x41, 0x7F, 0x00 },
    71. { 0x04, 0x02, 0x01, 0x02, 0x04, 0x00 },
    72. { 0x40, 0x40, 0x40, 0x40, 0x40, 0x00 },
    73. { 0x00, 0x03, 0x07, 0x08, 0x00, 0x00 },
    74. { 0x20, 0x54, 0x54, 0x78, 0x40, 0x00 },
    75. { 0x7F, 0x28, 0x44, 0x44, 0x38, 0x00 },
    76. { 0x38, 0x44, 0x44, 0x44, 0x28, 0x00 },
    77. { 0x38, 0x44, 0x44, 0x28, 0x7F, 0x00 },
    78. { 0x38, 0x54, 0x54, 0x54, 0x18, 0x00 },
    79. { 0x00, 0x08, 0x7E, 0x09, 0x02, 0x00 },
    80. { 0x18, 0xA4, 0xA4, 0x9C, 0x78, 0x00 },
    81. { 0x7F, 0x08, 0x04, 0x04, 0x78, 0x00 },
    82. { 0x00, 0x44, 0x7D, 0x40, 0x00, 0x00 },
    83. { 0x20, 0x40, 0x40, 0x3D, 0x00, 0x00 },
    84. { 0x7F, 0x10, 0x28, 0x44, 0x00, 0x00 },
    85. { 0x00, 0x41, 0x7F, 0x40, 0x00, 0x00 },
    86. { 0x7C, 0x04, 0x78, 0x04, 0x78, 0x00 },
    87. { 0x7C, 0x08, 0x04, 0x04, 0x78, 0x00 },
    88. { 0x38, 0x44, 0x44, 0x44, 0x38, 0x00 },
    89. { 0xFC, 0x18, 0x24, 0x24, 0x18, 0x00 },
    90. { 0x18, 0x24, 0x24, 0x18, 0xFC, 0x00 },
    91. { 0x7C, 0x08, 0x04, 0x04, 0x08, 0x00 },
    92. { 0x48, 0x54, 0x54, 0x54, 0x24, 0x00 },
    93. { 0x04, 0x04, 0x3F, 0x44, 0x24, 0x00 },
    94. { 0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00 },
    95. { 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00 },
    96. { 0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00 },
    97. { 0x44, 0x28, 0x10, 0x28, 0x44, 0x00 },
    98. { 0x4C, 0x90, 0x90, 0x90, 0x7C, 0x00 },
    99. { 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00 },
    100. { 0x00, 0x08, 0x36, 0x41, 0x00, 0x00 },
    101. { 0x00, 0x00, 0x77, 0x00, 0x00, 0x00 },
    102. { 0x00, 0x41, 0x36, 0x08, 0x00, 0x00 },
    103. { 0x02, 0x01, 0x02, 0x04, 0x02, 0x00 },
    104. { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00 }
    105. };
    106. int const InitLen = 23;
    107. unsigned char Init[InitLen] = {
    108.   0xAE, // Display off
    109.   0xD5, // Set display clock
    110.   0x80, // Recommended value
    111.   0xA8, // Set multiplex
    112.   0x3F,
    113.   0xD3, // Set display offset
    114.   0x00,
    115.   0x40, // Zero start line
    116.   0x8D, // Charge pump
    117.   0x14,
    118.   0x20, // Memory mode
    119.   0x02, // Page addressing
    120.   0xA1, // 0xA0/0xA1 flip horizontally
    121.   0xC8, // 0xC0/0xC8 flip vertically
    122.   0xDA, // Set comp ins
    123.   0x12,
    124.   0x81, // Set contrast
    125.   0x7F,
    126.   0xD9, // Set pre charge
    127.   0xF1,
    128.   0xDB, // Set vcom detect
    129.   0x40,
    130.   0xA6  // Normal (0xA7=Inverse)
    131. };
    132. void setup() {
    133. //  Serial.begin(9600);
    134.   Wire.begin(D1, D2);
    135.   InitDisplay();
    136. DisplayStr ("Character set for text - stored in program memory\n\r");
    137. DisplayStr ("Character set for text - stored in program memory\n\r");
    138. DisplayStr ("Character set for text - stored in program memory\n\r");
    139. }
    140.  
    141. void loop() {
    142.   // put your main code here, to run repeatedly:
    143.  
    144. }
    145. void Command(uint8_t c)
    146. {
    147.     Wire.beginTransmission(SSD1306_ADDRESS);
    148.     Wire.write(0x80);//command mode
    149.     Wire.write(c);
    150.     Wire.endTransmission();
    151. }
    152.  
    153. void Data(uint8_t d)
    154. {
    155.     Wire.beginTransmission(SSD1306_ADDRESS);
    156.     Wire.write(0x40);//data mode
    157.     Wire.write(d);
    158.     Wire.endTransmission();
    159. }
    160. void InitDisplay () {
    161.   for (uint8_t c=0; c<InitLen; c++) Command(Init[c]);
    162.   Display(12);    // Clear display
    163.   Command(0xAF);  // Display on
    164. }
    165. // Character terminal **********************************************
    166.  
    167. void ClearLine (uint8_t line) {
    168.   Command(0xB0 + line);
    169.   Command(0x00); // Column start low
    170.   Command(0x00); // Column start high
    171.   for (uint8_t b = 0 ; b < 128; b++) Data(0);
    172. }
    173.  
    174. // Clears the top line, then scrolls the display up by one line
    175. void ScrollDisplay (uint8_t *scroll) {
    176.   ClearLine(*scroll);
    177.   *scroll = (*scroll + 1) & 0x07;
    178.   Command(0xD3);
    179.   Command(*scroll << 3);
    180. }
    181.  
    182. // Plots a character; line = 0 to 7; column = 0 to 20
    183. void PlotChar (char c, uint8_t line, uint8_t column) {
    184.   column = column*6;
    185.   Command(0xB0 + (line & 0x07));
    186.   Command(0x00 + (column & 0x0F)); // Column start low
    187.   Command(0x10 + (column >> 4));   // Column start high
    188.   for (uint8_t col = 0; col < 6; col++) {
    189.     Data(pgm_read_byte(&CharMap[(c & 0x7F)-32][col]));
    190.   }
    191. }
    192.  
    193. // Prints a character to display, handling control characters
    194. void Display (char c) {
    195.   static uint8_t Line = 0, Column = 0, Scroll = 0;
    196.   if (c >= 32) {                   // Normal character
    197.     PlotChar(c, Line+Scroll, Column++);
    198.     if (Column > SSD1306_COLUMN) {
    199.       Column = 0;
    200.       if (Line == SSD1306_LINE) ScrollDisplay(&Scroll); else Line++;
    201.     }
    202.   } else if (c == 12) {            // Clear display
    203.     for (uint8_t p=0; p < 8; p++) ClearLine(p);
    204.     Line = Scroll;
    205.     Column = 0;
    206.   } else if (c == 13) {            // Return
    207.     Column = 0;
    208.     if (Line == SSD1306_LINE) ScrollDisplay(&Scroll); else Line++;
    209.   }
    210. }
    211. void DisplayStr (char *s) {
    212.   while (*s) Display(*s++);
    213. }
     
  5. Антон Витальевич

    Антон Витальевич Новичок

    Сообщения:
    11
    Симпатии:
    0

    Это немного не то у меня дисплей 128х32 и библиотека есть, но в любои случае спасибо
     
  6. alexlaw

    alexlaw Новичок

    Сообщения:
    105
    Симпатии:
    2
    Контроллер на нем SSD1306?
    А в чем тогда был вопрос?
     
  7. Антон Витальевич

    Антон Витальевич Новичок

    Сообщения:
    11
    Симпатии:
    0
    Помочь добавить в скетч вывод показаний термометра на дисплей
    И кстати моя платка при компиляции ругается на библиотеку ssd1306

    То что есть сейчас по мимо отображения температуры в приложении Blynk и управления реле от туда и автоматом по температуре датчиков, подключил дисплей с надписью Hello World. Еще раз простите я совсем новичёк.

    Код (Text):
    1. #include <OLED.h> //библиотека дисплея
    2. #include <Wire.h> //библиотека i2c
    3. #include <ArduinoOTA.h>
    4. #include <ESP8266WiFi.h>
    5. #include <BlynkSimpleEsp8266.h>
    6. #include <OneWire.h>
    7. #include <DallasTemperature.h>
    8. #define Relay2 2 //пин реле
    9. boolean tr = true; //назначаем логическую переменную для однократной отправки сообщения о температуре
    10. OLED display(4, 3);// пины дисплея
    11.  
    12.  
    13. // персональные данные
    14. char auth[] = "WXz5dvyH8SddpXJSdkU8sHt1Pg9xBudw"; //токен
    15. char ssid[] = "SmartHome";  //Имя точки доступа WIFI
    16. char pass[] = "LocalHost"; //пароль точки доступа WIFI
    17. #define ONE_WIRE_BUS D8 // пин датчика d18b20
    18. OneWire oneWire(ONE_WIRE_BUS);
    19. DallasTemperature sensors(&oneWire);
    20. BlynkTimer timer1;
    21. float temp2; //переменная температуры
    22. int tempConst2 = 24; //температура по умолчанию
    23. int gistT = 1; //задаем дельту
    24. float i; //показания датчика тока
    25. void sendTemps(){   //проверка температуры
    26.   sensors.requestTemperatures();
    27.   temp2 = sensors.getTempCByIndex(0);
    28.   Serial.println(temp2);
    29.   Blynk.virtualWrite(V1, temp2);
    30.    // Initialize display
    31.   display.begin();
    32.  
    33.   // Test message
    34.   display.print("123456");
    35.   delay(3*1000);
    36.     // Test display ON
    37.   display.on();
    38.   delay(3*1000);
    39. }
    40. BLYNK_WRITE(V4){    //считываем данные со слайдера
    41.   tempConst2 = param.asInt();
    42. }
    43. void checktemp(){   //сравниваем заданную и текущую температуру
    44.   if (temp2 >= tempConst2 + gistT) //если температура в норме
    45.   {
    46.     digitalWrite(Relay2, HIGH); //выключаем реле
    47.     Serial.println(tempConst2);
    48.     if (tr == true)
    49.     {
    50.       Blynk.email("*****@etlgr.com", "Температура в норме", " ");
    51.       Serial.println("_HIGH_");
    52.       tr = false; //присваиваем переменной обратное значение чтобы сообщение больше не отправлялось
    53.     }
    54.   }
    55.   else if (temp2 <= tempConst2 - gistT) // если температура нниже
    56.   {
    57.     digitalWrite(Relay2, LOW); //включаем реле
    58.     Serial.println(tempConst2);
    59.     if (tr == false) // проверяем логическую переменную
    60.     {
    61.       Blynk.email("*****@etlgr.com", "Низкая температура", " ");
    62.       Serial.println("_LOW_");
    63.       tr = true; //меняем значение переменной чтобы больше не отправлялось сообщение
    64.     }
    65.   }
    66. }
    67.  
    68. void setup(){       //настройки
    69.   pinMode(Relay2, OUTPUT);        // пин реле выход
    70.   Serial.begin(9600);             // скорость сериал порта
    71.   Blynk.begin(auth, ssid, pass);  //старт блинка
    72.   Blynk.syncAll();                // синхронизация блинка
    73.   sensors.begin();                // старт датчика температуры
    74.   ArduinoOTA.begin();             // старт обновления по воздуху
    75.   // Таймеры на запуск функций
    76.   timer1.setInterval(3000L, sendTemps); //опрос d18b20
    77.   timer1.setInterval(3000L, checktemp); //сравнение текущей температуры с заданой
    78. }
    79.  
    80. void loop(){
    81.   ArduinoOTA.handle();
    82.   Blynk.run();
    83.   timer1.run();
    84. }
     
  8. alexlaw

    alexlaw Новичок

    Сообщения:
    105
    Симпатии:
    2
    Код (Text):
    1. #define BUF_SIZE  255
    2.  
    3. float temp = 3.141;
    4. String temp_str =(String)(temp);
    5. char temp_char[BUF_SIZE ];
    6. temp_str.toCharArray(temp_char, BUF_SIZE );
    7. display.print(temp_char);
    Попробуйте так.
     
  9. alexlaw

    alexlaw Новичок

    Сообщения:
    105
    Симпатии:
    2
    Установил вашу библиотеку.
    #include "OLED.h"
    Попробовал. У меня работает.
    Код (Text):
    1. float temp = -23.141;
    2. String temp_str =(String)(temp);
    3. temp_str = "Temp=" + temp_str + "*C";
    4. char temp_char[temp_str.length() +  1];
    5. temp_str.toCharArray(temp_char, temp_str.length() +  1);
    6. display.print(temp_char);
    Пример.png
     
    Антон Витальевич нравится это.
  10. esp340

    esp340 Читатель

    Сообщения:
    76
    Симпатии:
    6
    Во-первых,
    Код (Text):
    1. display.begin();
    перенесите в Setup
    во-вторых, я бы взял другую библиотеку. Эту попробовал - в дополнение нужен еще и микроскоп чтобы что-то рассмотреть на дисплее 0,91
     
  11. Антон Витальевич

    Антон Витальевич Новичок

    Сообщения:
    11
    Симпатии:
    0
    Какую например? Я в этом деле НУБ, пробовал несколько но при компиляции только эту схавало из того что находил.
     
  12. Сергей_Ф

    Сергей_Ф Moderator Команда форума

    Сообщения:
    2.230
    Симпатии:
    229
    Где вы взяли столько портов ввода|вывода у ESP для 8 реле, датчика, да ещё экрана?
     
  13. esp340

    esp340 Читатель

    Сообщения:
    76
    Симпатии:
    6
    Например, эту
     
  14. Антон Витальевич

    Антон Витальевич Новичок

    Сообщения:
    11
    Симпатии:
    0
    У меня вот эта WeMos - подключение, распиновка и программирование D1 R2 и Mini плата на базе esp8266 12e, к ней и подключен блок реле, один датчик ds18b20 и дисплей по i2c
     
  15. Сергей_Ф

    Сергей_Ф Moderator Команда форума

    Сообщения:
    2.230
    Симпатии:
    229
    я и спрашиваю, как вы умудрились подключить? Схему дайте плз. Там только на реле надо 8 пинов + 1 на датчик. На i2c уже не остаётся, даже если использовать частично задействованые при загрузки пины.
     
  16. esp340

    esp340 Читатель

    Сообщения:
    76
    Симпатии:
    6
    показания на индикаторе с библиотекой OLED:
    oled1.png
    с использованием библиотеки OLED_I2C:
    oled2.png
     
  17. Антон Витальевич

    Антон Витальевич Новичок

    Сообщения:
    11
    Симпатии:
    0
    Доброго времени суток, долго не отвечал приношу извинения, все верно сейчас на все реле пинов и вправду не хватает, но это не критично так как и раньше использовалось только 5 реле, одно на обогреватель и 4 на свет, просто сейчас решил добавить дисплей для визуализации температуры. Библиотеку поменял и решил использовать Adafruit ssd1306
     
  18. Антон Витальевич

    Антон Витальевич Новичок

    Сообщения:
    11
    Симпатии:
    0
    Всем большое спасибо за участие, вопрос решен скетч прикладываю, хотя возможно в чем нибуть поправите.

    Код (Text):
    1. #include <Adafruit_GFX.h> //библиотеки дисплея
    2. #include <Adafruit_SSD1306.h> //пбиблиотеки дисплея
    3. #include <SPI.h>
    4. #include <Wire.h>
    5.  
    6. #include <ESP8266WiFi.h>
    7. #include <BlynkSimpleEsp8266.h>
    8. #include <OneWire.h>
    9. #include <DallasTemperature.h>
    10. #define Relay2 2 //пин реле
    11. #define SCREEN_WIDTH 128 // OLED display width, in pixels
    12. #define SCREEN_HEIGHT 32 // OLED display height, in pixels
    13. #define OLED_RESET     3 // Reset pin # (or -1 if sharing Arduino reset pin)
    14. Adafruit_SSD1306 display(OLED_RESET);
    15.  
    16.  
    17. boolean tr = true; //назначаем логическую переменную для однократной отправки сообщения о температуре
    18.  
    19. // персональные данные
    20. char auth[] = "Blynk token"; //токен
    21. char ssid[] = "Home";  //Имя точки доступа WIFI
    22. char pass[] = "Pass"; //пароль точки доступа WIFI
    23. #define ONE_WIRE_BUS D8 // пин датчика d18b20
    24. OneWire oneWire(ONE_WIRE_BUS);
    25. DallasTemperature sensors(&oneWire);
    26. BlynkTimer timer1;
    27. float temp2; //переменная температуры
    28. int tempConst2 = 24; //температура по умолчанию
    29. int gistT = 1; //задаем дельту
    30. void sendTemps(){   //проверка температуры
    31.   sensors.requestTemperatures();
    32.   temp2 = sensors.getTempCByIndex(0);
    33.   Serial.println(temp2);
    34.   Blynk.virtualWrite(V1, temp2);
    35.  
    36. }
    37. BLYNK_WRITE(V4){    //считываем данные со слайдера
    38.   tempConst2 = param.asInt();
    39. }
    40. void checktemp(){   //сравниваем заданную и текущую температуру
    41.   if (temp2 >= tempConst2 + gistT) //если температура в норме
    42.   {
    43.     digitalWrite(Relay2, HIGH); //выключаем реле
    44.     Serial.println(tempConst2);
    45.     if (tr == true)
    46.     {
    47.       Blynk.email("*****@etlgr.com", "Температура в норме", " ");
    48.       Serial.println("_HIGH_");
    49.       tr = false; //присваиваем переменной обратное значение чтобы сообщение больше не отправлялось
    50.     }
    51.   }
    52.   else if (temp2 <= tempConst2 - gistT) // если температура нниже
    53.   {
    54.     digitalWrite(Relay2, LOW); //включаем реле
    55.     Serial.println(tempConst2);
    56.     if (tr == false) // проверяем логическую переменную
    57.     {
    58.       Blynk.email("*****@etlgr.com", "Низкая температура", " ");
    59.       Serial.println("_LOW_");
    60.       tr = true; //меняем значение переменной чтобы больше не отправлялось сообщение
    61.     }
    62.   }
    63. }
    64. void setup(){       //настройки
    65.   pinMode(Relay2, OUTPUT);        // пин реле выход
    66.   Serial.begin(9600);             // скорость сериал порта
    67.   Blynk.begin(auth, ssid, pass);  //старт блинка
    68.   Blynk.syncAll();                // синхронизация блинка
    69.   sensors.begin();                // старт датчика температуры
    70.  
    71. display.begin(SSD1306_SWITCHCAPVCC, 0x3C);   // инициализируем объект «display» с I2C-адресом «0x3C», для 128x32
    72. display.clearDisplay();
    73.  
    74.   // Таймеры на запуск функций
    75.   timer1.setInterval(3000L, sendTemps); //опрос d18b20
    76.   timer1.setInterval(3000L, checktemp); //сравнение текущей температуры с заданой
    77. }
    78.  
    79.  
    80. void loop(){
    81.  
    82. display.setTextSize(3);
    83. display.setTextColor(WHITE);
    84. display.setCursor(10,5);
    85.  
    86.  
    87. String temp_str =(String)(temp2);
    88. temp_str =temp_str + "C";
    89. char temp_char[temp_str.length() +  1];
    90. temp_str.toCharArray(temp_char, temp_str.length() +  1);
    91. display.print(temp_char);
    92. display.display();
    93. display.clearDisplay();
    94.  
    95.  
    96.   Blynk.run();
    97.   timer1.run();
    98. }
    S91205-211255.jpg P91205-211240.jpg
     
  19. esp340

    esp340 Читатель

    Сообщения:
    76
    Симпатии:
    6
    Строки
    Код (Text):
    1. String temp_str =(String)(temp2);
    2. temp_str =temp_str + "C";
    3. char temp_char[temp_str.length() +  1];
    4. temp_str.toCharArray(temp_char, temp_str.length() +  1);
    достаточно заменить на
    Код (Text):
    1. display.print(temp2);
    2. display.print("C");
     
    Антон Витальевич нравится это.
  20. Антон Витальевич

    Антон Витальевич Новичок

    Сообщения:
    11
    Симпатии:
    0
    А не подскажите как точность показаний понизить до десятых градуса, а не сотых
     

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