Термометр дом улица на микроконтроллере: портал и журнал для разработчиков электроники

Термометр на микроконтроллере avr

Привет всем читателям и почитателям сайта Радиосхемы! Немного предыстории: вечером очень плохо видно показания уличного термометра, чтобы разглядеть положение стрелки, необходимо довольно долго вглядываться и иной раз пользоваться фонариком. Спустя определённое время мне это надоело и решил заменить прибор на электронный, который бы отображал информацию на светодиодных семи сегментных индикаторах. После чего бы не пришлось даже подходить к окну, чтоб узнать уличную температуру.


Поиск данных по Вашему запросу:

Схемы, справочники, даташиты:

Прайс-листы, цены:

Обсуждения, статьи, мануалы:

Дождитесь окончания поиска во всех базах.

По завершению появится ссылка для доступа к найденным материалам.

Содержание:

  • Термометр дом-улица на микроконтроллере AVR
  • Изучаем DS1820/DS18B20.
    Делаем простой термометр
  • ЧАСЫ-ТЕРМОМЕТР НА МИКРОКОНТРОЛЛЕРЕ ATMEGA8
  • Термометр.AVR+DS18B20.
  • Термометр на датчике SE97B и AVR-микроконтроллере
  • Универсальный двухканальный термометр на AVR

ПОСМОТРИТЕ ВИДЕО ПО ТЕМЕ: Простой термометр на микроконтроллере

Термометр дом-улица на микроконтроллере AVR


Re: пассики для проигрывателей винила Re: Динамическая индикация на LCD дисплее Re: Пассик на пленочный магнитофон Re: Продам набор SMD конденсаторов в корпусе Re: ШИМ-регулятор на Attiny13 В этой статье займемся изучением практического применения цифровых датчиков температуры DS18B Сделаем простой термометр на семисегментных индикаторах, который будет показывать положительную и отрицательную температуру с разрешением 0,1 градус Цельсия.

Для этой цели используем микроконтроллер Atmega8 , который работает от внутреннего генератора частотой 8 МГц, семисегментный индикатор с общим анодом четырехразрядный и датчик температуры DS18B Схема устройства показана на рисунке 1.

Шину данных датчика подключаем к порту PC0, а также подключаем к плюсу питания через резистор R1 номиналом 4,7 кОм, поскольку выходной транзистор датчика имеет открытый сток.

При питании датчика от шины данных паразитное питание вывод 3 датчика остается свободным. Как уже известно последовательность действий при работе с одним датчиком будет такая: 1 послать сигнал обнуления линии Реализация динамической индикации описана на одном из прошлых занятий, подпрограмма была немного упрощена но сути не изменила.

Также используется прерывание по переполнению таймера 2. Энциклопедия радиолюбителя Онлайн калькуляторы. Простейшая программа Подключение семисегментных индикаторов к AVR. Для универсальности можно Вывод Е — сигнал синхроимпульса, он по сути должен переключаться Задержки примерные, согласно описанию Доброго времени суток. Не совсем понял функции записи команд и данных, точнее их логику.

Зачем сначала Обновить список комментариев. Добавить комментарий. Наша группа ВКонтакте. Простейшая программа. Запомнить меня. Размер файла:


Изучаем DS1820/DS18B20. Делаем простой термометр

Здравствуйте уважаемые друзья и гости сайта! Представляю на ваш суд вторую конкурсную работу. Автор конструкции — Григорьев Илья Сергеевич. Всем добрый день! Захотелось мне собрать термометр для того, чтобы знать температуру или дома или за окном. Сторона у меня солнечная и обычный термометр очень врет, нагреваясь. Стал рыть интернет.

Термометр построен на популярном и очень широко распространенном датчике DS18B20 и микроконтроллере ATtiny, что.

ЧАСЫ-ТЕРМОМЕТР НА МИКРОКОНТРОЛЛЕРЕ ATMEGA8

Привет всем читателям и почитателям сайта Радиосхемы! Немного предыстории: вечером очень плохо видно показания уличного термометра, чтобы разглядеть положение стрелки, необходимо довольно долго вглядываться и иной раз пользоваться фонариком. Спустя определённое время мне это надоело и решил заменить прибор на электронный, который бы отображал информацию на светодиодных семи сегментных индикаторах. После чего бы не пришлось даже подходить к окну, чтоб узнать уличную температуру. Так как индикацию хорошо видно более чем с трёх метров. Схем данного устройства в сети полно , но я, как человек относящийся к семейству Радиолюбителей, решил собрать свою. Так как с недавних пор пытаюсь осваивать микроконтроллеры, то выбор пал на широко распространённый и дешёвый МК Atmega8. Далее была изготовлена плата по технологии ЛУТ, после чего уже приступил к программной части. В одном устройстве объединено две функции: собственно измерение температуры и времени часы. Индикация производится попеременно, сменяясь через десять секунд.

Термометр.AVR+DS18B20.

Шина 1-Wire была запатентована компанией Dallas Semiconductor, и была призвана наладить полудуплексную связь всего по одному сигнальному проводу. Также возможны варианты использования паразитного питания по линии данных потому что во все микросхемы 1-Wire встроен конденсатор номиналом пФ. Компания Dallas и позже купившая ее Maxim выпускают много всякий устройств с шиной 1-Wire. Это всякие термометры, календари, датчики, память, отдельно хочу отметить электронные таблетки iButton успешно используемые в устройствах идентификации.

Re: пассики для проигрывателей винила

Термометр на датчике SE97B и AVR-микроконтроллере

Обновлено Всем привет. В этой записи мы с Вами начнем монтаж основных элементов на плату которую спроектировали в прошлой статье. Своего рода, сегодня, у нас получится простой термометр. Попробуем запустить и убрать все недоработки. Алгоритм будет состоять из ранее написанных программ, как сборка конструктора.

Универсальный двухканальный термометр на AVR

Рубрика: Информатика и программирование. Скачать файл: referat. Краткое описание работы: Общие сведения о микроконтроллерах AVR, их основные параметры. Функции термометра, реализованного на микроконтроллере AVR. Порядок программирования микроконтроллера с использованием программы на языке С.

Схема и программа очень простого цифрового термометра с использованием микроконтроллера ATmega8 и датчика температуры.

Продолжаем осваивать периферию, на очереди измерение температуры. Рассмотрим вариант измерения, при помощи датчика температуры DS18b Для обмена информацией с AVR микроконтроллером используется 1-Wire протокол.

Раздавали они и красиво оформленные наборы I2C микросхем для различных классов приложений. Так вот, если есть такая микросхема, то почему бы не попробовать ее использовать где-либо в своих разработках? Мельчайший корпус датчика HWSON8 позволит без труда встроить термометр в любое устройство, ну или почти в любое. Рассмотрим эту микросхему и ее характеристики.

Проект Eldigi. В связи с этим на сайте могут быть ошибки.

Описываемое устройство может найти широкое применение среди радиолюбителей. Программа для микроконтроллера написана на ассемблере в среде AVR Studio. Монтаж выполнен на макетной плате, кварцевый резонатор на 4МГц, микроконтроллер ATtiny можно заменить на AT90S, предварительно перекомпилировав исходный код программы. Погрешность датчика DS около 0,5 С. В архиве также находится прошивка для случая если используется датчик DS18B Опрос датчика производится каждую секунду.

Логин или эл. Войти или Зарегистрироваться. Авторизация Логин или эл.


Экономичный термометр дом-улица с индикатором от сотового телефона

Разное

ГлавнаяРадиолюбителюРазное

12 лет назад


Исходной причиной этой разработки стало желание иметь автономное, малогабаритное устройство, способное длительное время работать от батареи. Первой проблемой стал выбор индикатора для отображения измеренных значений температуры Светодиодные индикаторы не подошли по причине значительного потребления тока. Обычный многоразрядный семиэлементный ЖКИ потребляет значительно меньший ток, но на него приходится подавать слишком много управляющих сигналов, что требует применения многовыводного микроконтроллера Лучше всего подошел ЖКИ со встроенным контроллером, управляемый всего несколькими сигналами После долгих поисков я остановился на ЖКИ от сотового телефона Nokia 3310. В него встроен управляемый по интерфейсу SPI контроллер LPH7779 или PCD8544, протокол управления которым известен.

Технические характеристики индикатора


Размер экрана, мм  …………30×22
Разрешение, пкс…………..84×48
Напряжение питания, В   ……2,7…3,3
Рабочая температура, °С    .. .-25…+70 Ток потребления, мкА      .   ……..300
Использовать в приборе микроконтроллер семейства PICmicro или AVR не хотелось по причине относительно большого тока потребления   Выбор пал на семейство микроконтроллеров MSP430 фирмы Texas Instruments. В него входят 16-разрядные микроконтроллеры с развитой периферией. Что в данном случае самое важное, они специально предназначены для работы от батарей и имеют сверхнизкое энергопотребление. Ток, потребляемый примененным микроконтроллером MSP430F2011IPW при напряжении питания 3 В и тактовой частоте ядра 8 МГц, не превышает 2 мА. Схема термометра показана на рис. 1.

Рис. 1

 

Для питания узлов прибора напряжение гальванического элемента G1 нужно повысить до 3,3 В. Это делает повышающий преобразователь на специализированной микросхеме NCP1400ASN33T1 (DA1). При собственном токе потребления 60 мкА она поддерживает выходное напряжение неизменным при снижении напряжения элемента вплоть до 0,8 В.
Датчики DS1821 (ВК1, ВК2) измеряют температуру в интервале от -55 до + 125 °С с погрешностью не более 1 °С. Они могут работать и в режиме термостата, подавая сигналы включения и выключения нагревателя или охладителя при достижении заданных значений температуры, но в рассматриваемом приборе этот режим не используется.
Связь датчиков с микроконтроллером происходит по известному интерфейсу 1-Wire Но в отличие от других микросхем с таким интерфейсом эти датчики не имеют индивидуальных номеров, поэтому для связи с каждой из них требуется отдельная линия. Использованы линии Р1.6 и Р1.7 микроконтроллера DD1. Опрос датчиков производится периодически, его результаты выводятся на индикатор HG1.

Рис. 2


Печатная плата термометра и расположение деталей на двух ее сторонах показаны на рис. 2. В налаживании устройство не нуждается и начинает работать сразу, но до установки микроконтроллера на плату и подключения к ней индикатора желательно проверить работу преобразователя напряжения на микросхеме DA1 и убедиться, что напряжение на его выходе равно 3,3 В во всем интервале возможных значений напряжения гальванического элемента G1.

Программа микроконтроллера (файл termometr. txt) и файл печатной платы термометра в формате Sprint Layout можно скачать здесь

Автор: А. Николаев, г. Боготол Красноярского края

Мнения читателей

Вы можете оставить свой комментарий, мнение или вопрос по приведенному выше материалу:

Комнатный термометр и гигрометр своими руками с использованием PIC16F688

Четверг, 20 июля 2017 г. / Ибрар Айюб

Этот проект касается создания цифрового комнатного термометра и гигрометра на основе микроконтроллера, который отображает температуру и относительную влажность на 4 больших (1 дюйм) семисегментных светодиодных дисплеях, уровень яркости которых регулируется в зависимости от окружающего освещения.

Он состоит из системы с замкнутым контуром, которая непрерывно оценивает условия окружающего освещения с помощью недорогого светозависимого резистора (LDR) и использует эту информацию для регулировки яркости дисплея. Недорогой датчик DHT11 используется для измерения температуры и относительной влажности. В этом проекте используется микроконтроллер PIC16F688, работающий на частоте 4 МГц, генерируемой внутренним источником. Отдельный чип драйвера дисплея (MAX7219) используется для управления и обновления данных дисплея на семи сегментных светодиодах.

Зачем нужна адаптивная регулировка яркости?

Автоматическая регулировка яркости семисегментных светодиодных дисплеев не только экономит электроэнергию, но и улучшает читаемость при любых условиях окружающего освещения.

Многие смартфоны, телевизоры высокой четкости, КПК, планшеты и экраны компьютеров теперь оснащены этой функцией. Он в основном затемняет дисплей в темной среде, но остается читабельным и приятным для глаз. Точно так же, когда уровень окружающего освещения повышается, дисплей становится ярче, чтобы улучшить читаемость. Этот проект отображает температуру и относительную влажность в помещении на больших 1-дюймовых семисегментных светодиодах, которые автоматически регулируют яркость в соответствии с условиями освещения в помещении. Так что, если вы поместите этот счетчик в своей спальне, вам не придется беспокоиться о том, чтобы выключить его в ночное время. Он автоматически затемняется достаточно низко, чтобы не мешать вашему сну, сохраняя при этом удобочитаемость.

Принципиальная схема 

Для облегчения объяснения я разделил полную принципиальную схему на 3 части: Блок питания , Блок микроконтроллера и датчика и Блок драйвера дисплея .

Блок питания состоит из микросхемы стабилизатора LM7805 для получения регулируемого источника питания +5 В от настенного адаптера постоянного тока 9–15 В. Полная принципиальная схема блока питания показана ниже. LED1 — это светодиодный индикатор включения питания.

На следующей принципиальной схеме показано подключение датчика DHT11 и фоторезистора (также называемого светочувствительным резистором или LDR) к микроконтроллеру PIC16F688. DHT11 — это недорогой цифровой датчик для измерения температуры в диапазоне 0–50 °C с точностью ±2 °C и относительной влажности в диапазоне 20–95 % с точностью ±5%. Датчик имеет полностью откалиброванные цифровые выходы и собственный протокол 1-wire для связи. Подробнее об этом датчике и его протоколе связи я рассказал в разделе «Измерение температуры и относительной влажности с использованием датчика DHT11 и микроконтроллера PIC». PIC16F688 использует вывод ввода-вывода RC4 для чтения выходных данных DHT11. Обратите внимание, что R7 служит подтягивающим резистором, необходимым для вывода данных датчика DHT11. Переключатель S2 на принципиальной схеме предназначен для выбора единиц измерения температуры в градусах Фаренгейта (°F) и градусах Цельсия (°C). Когда переключатель разомкнут, на выводе RC3 по умолчанию установлен низкий уровень, а температура отображается в градусах по Фаренгейту.

Чтобы выбрать шкалу °C, вывод RC3 должен быть поднят высоко, что происходит, когда S2 замкнут.

Затем фоторезистор (R5) и R4 образуют цепь делителя напряжения, как показано на схеме. Аналоговое напряжение на R4 увеличивается пропорционально количеству света, падающего на фоторезистор. Сопротивление типичного фоторезистора составляет менее 1 кОм при ярком освещении. Его сопротивление может достигать нескольких сотен кОм в очень темных условиях. Следовательно, для данной настройки напряжение на резисторе R4 может варьироваться от менее 0,1 В (в темноте) до более 4,0 В (при очень ярком освещении). Микроконтроллер PIC16F688 считывает это аналоговое напряжение через канал АЦП AN2 (RA2) для определения уровня окружающего освещения.

 

Подробнее: Самодельный комнатный термометр плюс гигрометр с использованием PIC16F688

 

Категории: How To — DIY — Projects, Metering — Instrument Projects, Projects, Projects Temperature Measurement Projects
6fpichymeter

1,

1 Теги: термометр

Создание термометра с поддержкой Wi-Fi | by Oscar Djupfeldt

Что вы делаете, когда у вас много свободного времени и доступ к дешевой электронике? Вы строите что-то простое, пытаясь чему-то научиться, термометр с поддержкой Wi-Fi.

Если у вас есть какие-то знания в области программирования, вы сможете закончить этот проект за день или меньше. Если вы новичок в этом, подумайте о бронировании выходных.

Цель этого проекта состояла в том, чтобы создать термометр с питанием от батареи и Wi-Fi, занимающий небольшую площадь, предпочтительно такой, который можно было бы разместить во всех комнатах моего дома, не будучи замеченным. Для этого требовался небольшой микроконтроллер с Wi-Fi, который также был энергоэффективным. Поскольку в долгосрочной перспективе я хотел их больше, важно было что-то дешевое.

Для этого проекта я выбрал ESP-7 или ESP-12F, программируемые Wi-Fi-модули на основе чипа Wi-Fi ESP8266 и микроконтроллера. И ESP-7, и ESP-12F довольно малы, поскольку они предназначены в первую очередь для крепления к печатной плате. Они оба выставляют почти те же контакты, что и ESP8266. ESP-7 немного меньше, имеет меньше контактов и встроенную антенну меньшего размера, но поставляется с разъемом для внешней антенны. ESP-12F немного больше, у него больше контактов и лучшая встроенная антенна, но нет разъема для внешней антенны.

Для этого проекта подойдет любой из них.

Сначала, список необходимого оборудования:

  • 1x ESP-12F
  • 4x 10 КОМ Резисторы
  • 1x 4,7 КОМ Резистор
  • 1x DS18B20 Цифровой термометр
  • 1x BAT42 DO-35 30V20. Аккумулятор 3,7 В или другой источник питания 3 В

Все это можно купить менее чем за 10 евро, самая дорогая часть, как правило, это ESP-12F или аккумулятор. Вам также понадобится какой-либо адаптер USB-последовательный порт. Вы также можете приобрести макетную плату, несколько контактных полосок и соединительных кабелей.

Схема макетной платы для разработки

Это довольно компактная схема для разработки, в основном для того, чтобы поместиться в изображение меньшего размера.

  • EN -> Vcc через резистор 10 кОм
  • GPIO0 -> Vcc через резистор 10 кОм
  • RST -> Vcc через резистор 10 кОм
  • GPIO15 -> GND через резистор 10 кОм перемычка (PROG), если цепь замкнута, ESP-12F переводится в режим программирования. Убедитесь, что эта цепь замкнута при программировании платы.

    RST также соединяется с GND через перемычку, если цепь замкнута, ESP-12F перезапускается.

    GPIO14 подключается к GND через перемычку. Если цепь замкнута, конфигурация программы сбрасывается при загрузке. Я объясню это позже.

    GPIO2 подключается к выводу данных (средний) DS18B20, а резистор 4,7 кОм подключается к выводу Vcc (справа), который, в свою очередь, подключается к Vcc. Контакт GND (слева) подключается к GND.

    RX подключается к TX на USB/последовательном адаптере, а TX подключается к RX на адаптере. Возможно, вам также придется подключить GND на USB/последовательном адаптере к GND на макетной плате.

    Подключите источник питания к шинам Vcc и GND соответственно.

    Если вы предпочитаете следовать принципиальной схеме, ниже представлена ​​макетная плата. Если вы хотите настроить их самостоятельно, они доступны в репозитории Github в виде файла Fritzing.

    Принципиальная схема

    Используя эту настройку, вы сможете запрограммировать ESP-12F, используя метод по вашему выбору. Я использовал Arduino, так как уже был с ней знаком, но эта установка также должна работать с NodeMCU.

    Полный исходный код проекта доступен по адресу https://github.com/Ozsie/wifiTemp

    Прежде всего вам необходимо установить Arduino, его можно скачать с их сайта. Вам также необходимо установить платы ESP8266, лично я предпочитаю использовать диспетчер плат. Инструкции о том, как это сделать, доступны в репозитории ESP8266 Arduino Github.

    После установки плат выберите плату «Универсальный модуль ESP8266» в меню «Инструменты». Установите скорость загрузки на «11520».

    Настройки платы

    Настройки в меню инструментов должны выглядеть примерно так. Теперь вы сможете собрать и запрограммировать свой ESP-12F. Еще раз убедитесь, что перемычка «Prog» закрыта.

    Получившаяся программа не очень интересна и для доступа к DS18B20 нужно добавить библиотеку в папку библиотек Arduino. В Windows он обычно находится в «c:\Users\\Documents\Arduino\libraries», а в OSX — в «~/Documents/Arduino/libraries».

    Я использовал Arduino Temperature Control Library от Miles Burton, загрузите либо последнюю версию, либо основную ветку и разархивируйте в папку библиотек Arduino.

    Ваш пустой скетч должен выглядеть примерно так:

    Если вы новичок в Arduino, первая функция (настройка) запускается один раз при запуске, а вторая функция (цикл) выполняется постоянно.

    Чтобы сделать что-то действительно интересное, давайте добавим код в функцию установки.

    На этом этапе рекомендуется открыть Serial Monitor из меню Tools в Arduino. Если вы создадите и запрограммируете это, вы должны увидеть «Hello World», напечатанное в последовательном мониторе. Все еще не очень весело, но, по крайней мере, вы можете убедиться, что все, кроме DS18B20, работает.

    На этой ноте давайте попробуем датчик. Измените свой код, чтобы он выглядел, как показано ниже.

    wifitemp.ino

    Здесь мы используем загруженную ранее библиотеку.

    Строки с 4 по 6 определяют контакт GPIO, к которому, как мы ожидаем, будет подключен датчик, в нашем случае GPIO2.

    Мы также добавили немного кода в функцию цикла. Каждые 100 миллисекунд мы пытаемся считать температуру с датчика, пока она не будет 85 или -127.

    Датчик по умолчанию настроен на 85 градусов Цельсия, поэтому первые несколько считываний, скорее всего, вернут это значение. Если результат -127 градусов по Цельсию, что-то не так либо с цепью, либо с самим датчиком.

    Когда считывается температура, отличная от 85 или -127, функция цикла снова запускается сверху. Это немного интереснее, чем ничего не делать, но не настолько полезно.

    Давайте на время оставим датчик и посмотрим на некоторые другие функции, которые может делать ESP-12F. Когда я собирал свой термометр, мне нужно было каким-то образом сохранить конфигурацию, например, SSID, пароль и куда-то отправить измеренную температуру. Самый простой способ здесь — жестко запрограммировать их в программе, однако это сопряжено с другими проблемами.

    Существует два разных способа хранения данных в ESP: в EEPROM или в SPIFFS. SPIFFS — это файловая система, она более полезна для хранения html и javascript, но вы можете хранить там файл конфигурации. Если вы используете этот подход, вы можете загрузить файл при программировании платы, но это связано с некоторыми из тех же проблем, что и жесткое кодирование. Я выбрал EEPROM для хранения моей конфигурации.

    EEPROM сохраняется при программировании платы, это может быть неприятно при попытке чего-либо, но когда у вас есть набор настроек, вы можете просто попробовать любые изменения, которые вы делаете без настройки.

    wifitemp.h

    Во-первых, давайте переместим включаемые и глобальные переменные в заголовочный файл. В этот файл мы также включаем EEPROM.h, чтобы получить доступ к EEPROM.

    В строках с 12 по 15 определяется структура, содержащая нашу конфигурацию, а в строке 19 вычисляется пространство, необходимое для хранения конфигурации. Последняя часть строки, + sizeof(«OK»), существует потому, что мы добавляем проверку в конце, чтобы убедиться, что мы прочитали все, что нам нужно.

    storageEeprom.ino

    Следующее, что нужно сделать, это добавить в скетч еще один файл, можете называть его как хотите, но я назвал его «storageEeprom». В этом файле мы определяем две функции: одну для чтения из EEPROM (loadEeprom) и одну для записи в EEPROM (storeEeprom).

    Давайте сначала посмотрим на storeEeprom. Первая строка функции, строка 4, сообщает EEPROM, к какой части памяти мы хотим получить доступ. В нашем случае это размер структуры Configuration плюс размер «ОК».

    Вторая строка записывает содержимое conf в EEPROM в байте 0. Далее мы определяем нашу проверку «ОК» и записываем ее в байт 0+sizeof(conf), то есть сразу после conf.

    EEPROM.write() на самом деле не записывает в EEPROM, а записывает в RAM.

    Далее фиксируем результат, это когда наши данные записываются в EEPROM. Возвращаемое значение будет true, если все прошло нормально, и false в противном случае. EEPROM.end() на самом деле также фиксирует, но ничего не возвращает, однако очищает ОЗУ.

    Чтение из EEPROM очень похоже на запись. Во-первых, так же, как и при записи, нам нужно указать, какой объем EEPROM мы хотим использовать. После этого мы можем использовать EEPROM.get() для чтения любого байта в указанном пространстве. Строки с 20 по 30 — это проверка, чтобы увидеть, получили ли мы все, что хотели, и если нет, сбросить то, что мы прочитали.

    Теперь у нас есть способ хранения и извлечения конфигурации, давайте воспользуемся им.

    wifitemp.ino

    Создайте в скетче файл с именем setup больше к этому.

    Строки с 11 по 13 предназначены в основном для того, чтобы получить представление о том, сколько места мы используем.

    Строка 15 открывает GPIO14 для чтения, если помните, ранее мы подключали GPIO14 к GND через перемычку. Вот где это вступает в игру, мы читаем состояние контакта, которое ВЫСОКОЕ, когда цепь разомкнута. Однако, если цепь замкнута, состояние НИЗКОЕ, и мы вызываем функцию storeEeprom(). В данном случае это приведет к очистке, так как наш экземпляр конфигурации пуст.

    Наконец, мы вызываем loadEeprom() и проверяем, загружена ли конфигурация.

    Теперь нам нужен способ передать конфигурацию в ESP-12F. Для этого мы можем использовать один из основных пунктов продажи ESP, WIFI. ESP может выступать как в качестве точки доступа, так и в качестве клиента, и, вдохновившись Chromecast, мы можем сначала запустить его в качестве точки доступа, а когда конфигурация будет получена, мы переключимся на клиент.

    Нам нужно добавить кое-что в заголовочный файл, строки 4 и 5 включают библиотеки, необходимые для Wi-Fi и http-сервера.

    Строка 10 создает экземпляр веб-сервера на порту 80.

    wifitemp.h

    Теперь, когда у нас есть экземпляр веб-сервера, мы можем использовать его для получения конфигурации. Поскольку на данный момент мы ничего не знаем о вашем SSID, мы настраиваем ESP в качестве точки доступа. Для этого создаем в скетче новый файл «setup».

    setup.ino

    Давайте сначала посмотрим на setupServer(), большая часть функции — это информация, отправляемая по последовательному порту, так что мы получаем необходимую информацию.

    Строки 9 и 10 определяют SSID и пароль нашей точки доступа, а строка 12 запускает ее. Мы отправляем IP-адрес по последовательному порту, чтобы знать, куда отправлять конфигурацию.

    Наконец, в строке 23 мы говорим нашему веб-серверу использовать функцию handleConfig() при вызове root.

    Функция handleConfig() просматривает входящие параметры и сохраняет их в соответствующей переменной в conf. Параметры, отличные от «ssid» и «password», игнорируются, и если ожидаемые параметры отсутствуют, мы возвращаем короткий html-фрагмент, объясняющий это.

    Когда все ожидаемые параметры есть, «ОК!» возвращается клиенту, конфигурация сохраняется в EEPROM.

    Теперь мы можем сохранять и извлекать конфигурацию из EEPROM. Следующим шагом будет использование конфигурации для подключения к вашей сети.

    В строке 24 мы вызываем setupServer() вместо того, чтобы просто вывести сообщение об ошибке на серийный номер. Как вы, возможно, уже поняли или уже знали, все файлы в скетче присоединяются друг к другу.

    Есть некоторые изменения в функции цикла, я добавил некоторые ограничения на попытки чтения с датчика. Строки 51 и 54 переводят ESP в режим глубокого сна, чтобы продлить срок службы батареи. Нет необходимости постоянно измерять.

    В начале функции цикла мы еще раз проверяем, загружена ли конфигурация, если нет, мы говорим веб-серверу обработать любого клиента.

    Когда конфигурация получена, мы пытаемся ее использовать, пока ESP не подключен к WIFI SSID, указанному в конфигурации, мы пытаемся подключиться, вызвав wifiConnect().

    Эта функция определена в строке 60. Сначала мы убеждаемся, что не подключены ни к какой другой сети, а затем пытаемся подключиться, вызывая WiFi.begin().

    Возможно, вы заметили вызов sendTemperature() в строке 53. Эта функция предназначена для того, чтобы наши измерения были опубликованы для всего мира.

    Чтобы получить температуру куда-либо, кроме ESP, вы можете отправить ее по последовательному каналу на какой-либо другой компьютер, однако это сделает все проблемы с настройкой спорными, и я хочу, чтобы мой термометр был полностью беспроводным.

    Это означает, что нам нужно куда-то отправить измерение. Я выбрал Firebase, так как использовал его раньше, но вы также можете использовать AWS, Azure или свой собственный сервер или любое другое решение.

    Добавьте в скетч еще один файл, я назвал его «jsonTools».

    Он содержит одну функцию, довольно глупую, но выполняет свою работу по поиску значения ключа в строке JSON, но только на корневом уровне. Это хорошо для того, для чего мы будем его использовать.

    Создайте еще один файл в скетче, назовем его «firebase». Здесь есть две функции, первая используется для аутентификации пользователя Firebase путем подключения к www.googleapis.com и публикации учетных данных.

    Строки с 7 по 11 пытаются подключиться к серверу через порт 443. Если это удается, отправляется запрос POST с учетными данными. Вы можете заметить некоторые новые значения в структуре конфигурации в строках 19.и 20, вы уже должны понять, как их правильно добавить.

    Строки с 23 по 29 представляют собой запрос POST с указанными выше signInUrl и полезными данными.

    Чтобы свести к минимуму время выполнения, мы ждем ответа не более одной секунды, если это время превышено, с нашей точки зрения вход не удался, и возвращается «ошибка».

    Если мы получаем ответ в течение нашего срока, мы вызываем функцию, которую мы определили ранее, findJsonKey() и возвращаем ее результат.

    Функция sendTemperature() работает по тому же принципу, что и signIn(), мы подключаемся к серверу, на этот раз из нашей конфигурации. Этот сервер, conf.hubIp, в случае Firebase будет .firebaseio.com, а порт — 443.

    Я не буду вдаваться в подробности того, как здесь настраиваются мои правила Firebase, но определение доступно в моем репозитории Github. Достаточно сказать, что теперь мы используем токен входа, возвращенный ранее.

    Остальная часть этой функции отправляет измеренную температуру в Firebase и игнорирует любой ответ. Мне все равно, сработало это или нет, если сработало, меня не волнует содержимое, а если нет, я проверяю отсутствующие отчеты на другом конце, это выходит за рамки этой статьи, но еще раз вы можете найдите код для этого в репозитории Github.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *