• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Esp8266 + дисплей +энкодер + датчики

Задумал спроектировать устройство - контроллер электро-котла на микроконтроллере с wi-fi edp8266.
Взял за основу wemos mini d1, спаял с нее модуль esp12f и развел плату.
Скриншот 23-05-2022 16.29.12.png
Но на этапах тестирования когда и железа, столкнулся с проблемами, которые пока не могу решить.
1. При подключении к esp8266 дисплея nokia5110 и энкодера, задействуются 8 пинов:
D4, D3, D2, D1, D0 - для дисплея (CLK, DIN, DC, CE, RST) соответственно.
D5, D6, D7 - для энкодера (A-GPIO14, B-GPIO12, KEY-GPIO) соответственно.
Пробовал энкодер к пину D10(GPIO1)TX0 подключить, но костыль то работает то нет(при использовании serial порта при отладке не работает решение)
В общем пинов не хватает катастрафически.
Менять концепцию не хотелось бы...плата разведена.
А еще надо хотя бы два термодатчика подключить по шине I2C - AHT10 и DS18B20.
Помимо этого с esp12f идет четыре сигнала с пинов на базы мосфетов, для включения 3-х реле на ТЭНы и на одно реле водяного насоса.
Скриншот 23-05-2022 16.54.59.png
Как то можно дисплей переназначить на иные пины:
//#define D1 5 // I2C Bus SCL (clock)
//#define D2 4 // I2C Bus SDA (data)
Чтобы и энкодер функционировал(его через мультиплексор не подключить)?
Мультиплексор вроде только количество аналоговых пинов увеличивает, или можно и цифровые?
Но для мультиплексора надо тоже 3 или 4 пина выделать, что использование мультиплексора для подключения реле - сводит на нет.
Дисплей также через мультиплексор не подключить...
Пины GPIO6-GPIO11 тоже никоим образом нельзя использовать ни на вход ни на выход.
ESP8266-12E-opisanie-raspolozheniya-vyvodov[1].png
Как быть, посоветуйте ГУРУ разработок на ардуине.
Использовать ATMEGA328P в связке с wi-fi модулем?
Можно как то увеличить количество входов/выходов на esp8266 или это не больше чем игрушка для светодиодиков, но никак не полноценный микроконтроллер для дома с управлением через интернет?
 
Странное дело!
Переназначил "ноги" DC и CE на пины 3 и 13 соответственно.
Код:
// Nokia 5110 LCD module connections (CLK, DIN, DC, CE, RST)
Adafruit_PCD8544 display = Adafruit_PCD8544(2, 0, 3, 13, 16); //Use gpio's
Получается задействовал пин RX0.
Как рекомендует "мурзилка" добавил в код:
Код:
Serial.begin(115200,SERIAL_8N1,SERIAL_TX_ONLY);
Но в мониторе порта пусто...
Стал экспериментировать.
Вернул старую строчку
Код:
Serial.begin(115200);
И после загрузки скетча в esp12f я передергиваю кто о чем usb кабель и данные в монитор порта идут без проблем, но появляется проблема "доступности" порта в случае повторной загрузки скетча.
Код:
Arduino: 1.8.19 (Windows 10), Плата:"NodeMCU 0.9 (ESP-12 Module), 80 MHz, Flash, Disabled (new aborts on oom), Disabled, All SSL ciphers (most compatible), 32KB cache + 32KB IRAM (balanced), Use pgm_read macros for IRAM/PROGMEM, 4MB (FS:2MB OTA:~1019KB), v2 Lower Memory, Disabled, None, Only Sketch, 115200"

Executable segment sizes:

ICACHE : 32768           - flash instruction cache

IROM   : 252708          - code in flash         (default or ICACHE_FLASH_ATTR)

IRAM   : 27977   / 32768 - code in IRAM          (IRAM_ATTR, ISRs...)

DATA   : 2040  )         - initialized variables (global, static) in RAM/HEAP

RODATA : 1168  ) / 81920 - constants             (global, static) in RAM/HEAP

BSS    : 26392 )         - zeroed variables      (global, static) in RAM/HEAP

Скетч использует 283893 байт (27%) памяти устройства. Всего доступно 1044464 байт.

Глобальные переменные используют 29600 байт (36%) динамической памяти, оставляя 52320 байт для локальных переменных. Максимум: 81920 байт.

esptool.py v3.0

Serial port COM23

Traceback (most recent call last):

  File "C:\Users\Admin\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2/tools/upload.py", line 66, in <module>

    esptool.main(cmdline)

  File "C:/Users/Admin/AppData/Local/Arduino15/packages/esp8266/hardware/esp8266/3.0.2/tools/esptool\esptool.py", line 3551, in main

    esp = chip_class(each_port, initial_baud, args.trace)

  File "C:/Users/Admin/AppData/Local/Arduino15/packages/esp8266/hardware/esp8266/3.0.2/tools/esptool\esptool.py", line 271, in __init__

    self._port = serial.serial_for_url(port)

  File "C:/Users/Admin/AppData/Local/Arduino15/packages/esp8266/hardware/esp8266/3.0.2/tools/pyserial\serial\__init__.py", line 90, in serial_for_url

    instance.open()

  File "C:/Users/Admin/AppData/Local/Arduino15/packages/esp8266/hardware/esp8266/3.0.2/tools/pyserial\serial\serialwin32.py", line 64, in open

    raise SerialException("could not open port {!r}: {!r}".format(self.portstr, ctypes.WinError()))

serial.serialutil.SerialException: could not open port 'COM23': PermissionError(13, '�������� � �������.', None, 5)

serial.serialutil.SerialException: could not open port 'COM23': PermissionError(13, '�������� � �������.', None, 5)



Неверная библиотека найдена в C:\Users\Admin\Documents\Arduino\libraries\NokiaRus2: нет заголовочных файлов (.h), найденных в C:\Users\Admin\Documents\Arduino\libraries\NokiaRus2



Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
Ясно, что порт закрывается в случае использования RX0, но почему не нужна инструкция порту, что теперь только TX0 использовать на вывод Serial.print("Бла бла бла");
 
У меня монитор порта(окно) было открыто и видимо как то запомнило состояние одного из скетча.
Когда переоткрыл монитор порта то стало без перестыковки USB все работать.
Но порту RX0 по прежнему без разницы, указано явно
Код:
Serial.begin(115200,SERIAL_8N1,SERIAL_TX_ONLY);
или нет.
 

CodeNameHawk

Moderator
Команда форума
Две есп это наверное круто, особенно если не делать отладки на макетке.
спаял с нее модуль esp12f и развел плату.
А что, модули есп уже не продают?
По мне так проще на мини делать отладку, а на плату ставить голый модуль.
 
А что, модули есп уже не продают?
Все верно, просто так написал, что "спаял модуль esp12f с платы wemos'а".
На самом деле докупил еще несколько, "голых" esp12f и esp12e.
Но отладка проще с wemos mini d1.
Вопрос то не в том был, не обижайтесь, уважаемый CodeNameHawk
 

CodeNameHawk

Moderator
Команда форума
не обижайтесь,
В смысле обижаться.
Все верно, просто так написал, что "спаял модуль esp12f с платы wemos'а".
Тут не понятно, зачем писать если не делали.
У меня управление котлом на атмега16.
Есп только для связи с миром, веб сервер по домашней сети, отправка данных на внешний сервер и важные события на телеграм.
Делать управление на есп может быть опасно, подвисает она, причём часть программы может и дальше выполняться.
 
подвисает она, причём часть программы может и дальше выполняться.
Этот момент тоже напрягает местами, но по суть наверное, все зависит от правильности кода написанного, а не от железки.
Меня в данной теме волнует вопрос увеличения количества пинов под указанную периферию - возможно или в принципе нереально и надо выбираться для самоделки иное железо?
 

CodeNameHawk

Moderator
Команда форума
но по суть наверное, все зависит от правильности кода написанного, а не от железки.
Зависит, но не только от вашего но и от кода в железке, так что дело в железке.
При, цене несколько баксов за атмегу328 или аналога, это имхо будет самый простой расширитель портов, в плане цены и времени отладки, по сравнению с простым расширителем порта н.п. pfc8574.
 
атмега328 или аналог, это имхо будет самый простой расширитель портов
Вас понял, поиграюсь еще с esp12f и если окончательно ничего не выйдет, перейду на другую "железку".
Пока что получается раздобыть пины/контакты для дисплея, энкодера и для датчиков по шине I2C.
 
Прошу прощения, ответа на вопрос никто пока не дал:
Как увеличить количество входов/выходов для подключения дисплея, энкодера и датчиков по I2C?
Можно ли дисплей нокия 5110 подключить через мультиплексор?
 
Esp32 явно избыточна.
Да и стоит "деньгу".
И esp12 штук пять есть, куда их...на мусорку?)))
Уверен можно как то подключить дисплей через расширитель портов, по крайней мере некоторые пиры дисплея.
С энкодером сложнее..
 
Кто что думает по поводу модулей PCF8574 и PCF8575?
Вроде и дисплея 5110 можно через них подключать.
В идеале вообще взять эту микросхему, не модуль, и развести на плате с модулем esp12f.
 

Mоnk

Member
На 2.4.2 работает. В 3.0.2 как и водится, вопросы к соблюдению стандартов. Пока не разбирался.
Ролик
 
Информация, возможно кому-либо пригодится.
При подключении датчика DS18B20
архивы брал отсюда.
Словил ошибку
Код:
'\U0000feff' does not name a type
Помощь нашлась у японцев.
Дело в кодировке файлов, в архиве файл DallasTemperature.cpp был в кодировке с BOM.
Поставил UTF-8, проблема ушла.
 

Вложения

"И зачем я туда полез..."
Ну вот привел меня поиск "туда")))
Не пойму, что не так с кодом?
Код:
// переменная для хранения температуры
float temperature;
// необходимая температуры  
const int neededTemp=34;
//переменная при отсоединенном датчике DS18B20 
const int alarmTemp=-127.00;

void setup() {
  pinMode(14,OUTPUT);//REL1 - TEN1

  sensor.begin();
  // устанавливаем разрешение датчика от 9 до 12 бит
  sensor.setResolution(12);
}

void loop() {
    if (10<temperature<neededTemp) {
        //сигнал на включение ТЕНа 1
         digitalWrite(14,HIGH);
     } else if (temperature<=alarmTemp) { //На случай обрыва датчика и пропадания сигнала о температуре
//сигнал на отключение ТЕНа 1
        digitalWrite(14,LOW);
     }
}
При отсоединении датчика, переменная temperature принимает значение -127.00
Но условие else if почему то не выполняется...
 
Сверху Снизу