• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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 почему то не выполняется...
 
Сверху Снизу