Добавление часов реального времени (с синхронизацией по ком порту) в метеостанцию


После того, как я разобрался с подключением датчиков и натестился с разными комбинациями и режимами работы ардуины, все таки решил довести метеостанцию до более менее практичного вида. Колхоз месяца обеспечен ( хотя без скотча, изоленты, жидкиих гвоздей и холодной сварки до этого звания далеко, но все еще впереди)

Как выяснилось из комментариев к предыдущему посту, во всех датчиках присутствует стабилизатор 662k, что позволяет питать их от 5 В, что в свою очередь позволяет абсолютно все элементы соеденить в общую шину. С информационной шиной I2C не стал заморачиваться, решил не ставить преобразователь логических уровней, все и без него работает, возможно даже в нормальном режиме) В даташитах указана инфа по чипам, а в Китае клепается своя обвязка и, походу, китайцы сами не знают что продают.
В общем я решил в ежедневном исполнении убрать датчик освещенности и инфракрасное управление, вынесу их в отдельный проект, добавить же решил часы реального времени на той же шине I2C.
Выбор пал на DS3231

Характеристики:

Точность ±2 ppm в диапазоне температур от 0°C до +40°C
Точность ±3.5 ppm в диапазоне температур от-40°C до +85°C
Вход для подключения автономного источника питания, позволяющего обеспечить непрерывную работу
Рабочий температурный диапазон:
коммерческий: от 0°C до +70°C
индустриальный: -от 40°C до +85°C
Низкое потребление
Часы реального времени, отсчитывающие секунды, минуты, часы, дни недели, дни месяца, месяц и год с коррекцией високосного года вплоть до 2100
Два ежедневных будильника
Выход прямоугольного сигнала с программируемой частотой
Быстродействующие (400 кГц) I2C интерфейс
3.3 В питание
Цифровой температурный датчик с точностью измерения ±3°C
Регистр, содержащий данные о необходимой подстройке
Вход/выход сброса nonRST
Даташит

Это относительно чипа, а вот доп инфа по модулю, который ваяют китайцы:

1. Размер: 38 мм (длина) * 22 мм (ширина) * 14 мм (высота)
2. Вес: 8 г
3. Рабочее напряжение: 3.3-5.5 В
4. Микросхемы памяти: AT24C32 (емкость 32 К)
5. Шина IIC интерфейса, (рабочее напряжение 5 В)
6. I2C адрес может быть изменен замыканием A0/A1/A2, по умолчанию адрес 0x57

По идее для точности нужно на питание добавить конденсатор, но я решил действовать без лишних телодвижений, вроде и так работает. За 2 недели время не ушло совсем либо меньше чем на секунду.
Насчет самого модуля, он пришел уже с батарейкой и с уже припаянными контактами, так что покупать какой либо другой модуль не имеет абсолютно никакого смысла. Я поспешил и купил 2 других модуля, более дешевых, но без батарейки и с неприпаянными контактами, так мало того, что если докупить батарейку то получается дороже и точность у них меньше, так еще и лично для меня припаять контакты оказалось адской пыткой.

Вот так выглядит моя схема соединений.


Таки решил освоить эту программу, кое как понарисовывал модули, как соберусь допилить — выложу файл.
Скетч
#include <Wire.h>

#include <DS3232RTC.h>        //http://github.com/JChristensen/DS3232RTC
#include <Streaming.h>        //http://arduiniana.org/libraries/streaming/
#include <Time.h>             //http://playground.arduino.cc/Code/Time

#include <SI7021.h>
SI7021 sensor;

#include "LiquidCrystal_I2C.h"
#include <LCD_1602_RUS.h>
LCD_1602_RUS lcd(0x27, 16, 2);

#include <Adafruit_BMP085.h>
Adafruit_BMP085 bmp;

void Si7021()
{
si7021_env data = sensor.getHumidityAndTemperature();
double temp1=(double)data.celsiusHundredths/100.0;
double hum1=(double)data.humidityBasisPoints/100.0;
 
  lcd.setCursor(9,0);
  lcd << temp1;
  lcd.print(L"°C");

  lcd.setCursor(9,1);
  lcd << hum1 << " \%";
  
}

void BMP085()
{   
  double pr=(double)bmp.readPressure() / 133.3224;
      
  lcd.setCursor(0,1);
  lcd.print(pr,1);
  lcd.print(L" мм");

}
static time_t tLast;
    time_t t;
    tmElements_t tm;
void RTC_set()
{
    //check for input to set the RTC, minimum length is 12, i.e. d,m,yy,h,m,s
    if (Serial.available() >= 12) {
        //note that the tmElements_t Year member is an offset from 1970,
        //but the RTC wants the last two digits of the calendar year.
        //use the convenience macros from Time.h to do the conversions.
        tm.Day = Serial.parseInt();
        tm.Month = Serial.parseInt();
        int y = Serial.parseInt();
        if (y >= 100 && y < 1000)
            Serial << F("Error: Year must be two digits or four digits!") << endl;
        else {
            if (y >= 1000)
                tm.Year = CalendarYrToTm(y);
            else    //(y < 100)
                tm.Year = y2kYearToTm(y);
            tm.Hour = Serial.parseInt();
            tm.Minute = Serial.parseInt();
            tm.Second = Serial.parseInt()+1; /поправка на длительность синхронизации
            t = makeTime(tm);
            RTC.set(t);        //use the time_t value to ensure correct weekday is set
            setTime(t);        
 Serial << F("RTC set") << endl;
            //dump any extraneous input
            while (Serial.available() > 0) Serial.read();
        }
    }
}

void Time_print()
{
    t = now();
    
        lcd.setCursor(0,0);
        lcd  << ((hour(t)<10)?"0":"") << _DEC(hour(t)) << ":";
        lcd  << ((minute(t)<10)?"0":"") << _DEC(minute(t)) << ":";
        lcd  << ((second(t)<10)?"0":"") << _DEC(second(t));
}
void setup()
{
  Serial.begin(9600);
  
    setSyncProvider(RTC.get);
    Serial << F("RTC Sync");
    if (timeStatus() != timeSet) Serial << F(" FAIL!");
    Serial << endl;
 bmp.begin();
  
 lcd.begin();
 lcd.backlight();

      Si7021();
      BMP085();
}
int n;
void loop()
{
      Time_print();   
      RTC_set();
if (n==5) {
      Si7021();
      BMP085();
      n=1;
} else {n++;}

delay(1000);    

} 



Код это немного изменный пример из библиотеки часов. Особенность примера на мой взгляд в том, что происходит (в теории, не знаю как проверить) синхронизация часов ардуины с модулем RTC (setSyncProvider(RTC.get);), и уже на дисплей выводится время ардуины и модуль не дергается каждую секунду, наверно так экономичнее. Изменения коснулись добавления модулей, а также синхронизация ожидается в любой момент времени и с изменным для удобности форматом d,m,yy,h,m,s. Каждую секунду на экране обновляется время и каждых 5 секунд обновляются показания датчиков. После убирания lcd.clear() экран перестал мерзко мигать и, если данные по экрану не скачут (а в данном случае так и есть), они просто красиво обновляются.
Решил никакой истории давления не вести, лично мне достаточно того, что сейчас и того что было вчера.

Батник для синхронизации часов


@echo off
MODE COM1: baud=9600 parity=N data=8 stop=1 dtr=off>nul
ping -n 3 127.0.0.1 > nul
set str=%date%,%Time%,
set str=%str: =%
echo %str%>\\.\COM1

Я по роду свой деятельности регулярно использую батники для автоматизации процессов и тут я решил применить свои навыки. В интернете годных примеров найти не удалось, решил писать сам с нуля. Несколько часов я проходился по одним и тем же граблям, уже и на VBS перешел, уже и скрипт начал писать с эмуляцией нажатий клавиш в терминале, пока до меня не дошло что ардуино перегружается каждый раз как открыватеся терминал, вот что значит не читать мануалы и начинать со всего готового. В общем нужно просто порт открыть с отключенным сигналом DTR, подождать пару секунд, получить системное время, удалить пробелы(если получать дату и время отдельно, удалять пробелы ненужно) и отослать это в порт.

Кстати потребляет метеостанция после переделки 0,04 А, в сутки потребляет 960 мАч. Я ее без расчетов запитал от повербанка около 2 Ач и через двое суток все благополучно потухло) Сейчас запитано от БП от LG MCS-04ED (5,26 В/1,8A), все работает чинно.

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


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

В общем, судя по комментариям и этой статье в этом модуле возможны некоторые доработки:

1) можно убрать светодиод индикации питания
2) можно убрать подтягивающие резисторы шины I2c
3) можно и даже нужно выпаять что то из цепи подзарядки батареи, которая в принципе не должна заряжаться, а даже если поставить аккумулятор, то не будет никакого контроля заряда, да и у аккумулятора намного меньше емкость и больше стоимость
Планирую купить +22 Добавить в избранное +22 +42
+
avatar
0
Датчик BMP180 нужно от света прятать.
+
avatar
0
С какой целью? 2 года работает при комнатном освещении — все норм.
+
avatar
+4
Ну если прямой свет не попадает «в окошко», то все более менее… а если попадет — показания искажаются.
Вот из даташита:
«During operation the sensor is sensitive to light, which can influence the accuracy of the
measurement (photo-current of silicon).»
+
avatar
0
Спасибо за инфо! Не знал.
+
avatar
  • LaeX
  • 05 марта 2016, 12:35
0
При запуске скрипта на компьютере получаю:

+
avatar
+2
ну дык значит либо порт другой либо порт уже открыт
+
avatar
0
А от имени администратора запустить скрипт попробуй.
+
avatar
  • LaeX
  • 05 марта 2016, 12:50
0
пробовал
+
avatar
  • maxeler
  • 26 января 2018, 18:58
0
Может порт другой нужно прописать в батнике?
+
avatar
0
Приветствую автора! Спасибо за обзор, вы молодцы! Но буду немного занудой.
Выбор пал на DS3231
Отличная микросхема, за два года работы «ушла» секунд на 5.
По идее для точности нужно на питание добавить конденсатор
Если у вас хороший источник питания, то никаких конденсаторов не надо. На точность хода не влияет. Главное чтобы напряжение питания было согласно datasheet.
синхронизация часов ардуины с модулем RTC
У Ардуино нет встроенных часов. Иначе зачем вам модуль RTC?

Кстати микросхема очень точная, не вижу смысла её постоянно синхронизировать :) Ну и всегда целостность и вид устройства определялся корпусом, найдите время сделать хороший корпус.
+
avatar
0
наверно правильнее сказать установка часов, синхронизирую только раз, но можно делать в любой момент.
в ардуино есть кварц, с его помощью отсчитываются задержки. с помощью библиотеки эмулируется ход часов, так называемые software clock, но они не точные.
изначально меня не устроил сам метод установки времени по времени прошивки да и хотелось подкорректировать в любое время если есть возможность.
+
avatar
0
тоже надо сделать синхронизацию из консоли и установку будильника
вот только сдается мне, что использование потоков сильно сжирает ресурсы как пзу, так и озу
у меня 17к только мелодия звонка занимает в виде набора данных

а сколько у тебя прошивка заняла?
+
avatar
0
странно, почитал про библиотеку
This syntax is familiar to many, is easy to read and learn, and, importantly, consumes no resources. (Because the operator functions are essentially just inline aliases for their print() counterparts, no sketch gets larger or consumes more RAM as a result of their inclusion.)

это радует
+
avatar
0
Я не ардуинщик, поэтому нуждаюсь в дополнительном объяснении:
Правильно ли я понял, что все модули подключали по i2c шине?
У меня есть все модули из перечисленных, кроме модуля, подключенного к дисплею.Это i2c модуль для экрана?
+
avatar
0
да, припаивается прямо к дисплею и к ардуине идет только 4 провода, если нету можно обойтись и подключить напрямую, нужно тогда только в скетче по другому обьявить дисплей в начале
+
avatar
  • swan
  • 05 марта 2016, 15:28
0
Давно интересовал вопрос.
А зачем на этом модуле EEPROM-ка 24C32?
Будильники хранить?
+
avatar
0
Да просто кто-то для своего проекта заказал большую партию таких модулей, но то ли не смог выкупить, то ли китайцы как всегда скомуниздили идею. Скорее всего кто-то не смог выкупить, т.к. тогда они бы просто экономили и не запаивали память.
+
avatar
0
Замечательный проект! Плюсанул. Мне бы лично было бы жалко использовать UNO, я бы взял NANO. А UNO — для обкатки скетча.
+
avatar
0
если честно все так и планируется))
+
avatar
0
С датчика SI7021 снимите белую плёнку, она транспортировочная.
+
avatar
0
вы уверенны? в даташите написано что это защита от пыли, она пропускает влагу. по крайней мере у меня показания сомнения не вызывают
+
avatar
0
Перечитал даташит. Вы правы.
Видимо перепутал с другим датчиком. Там чётко было указано, удалить при использовании.
+
avatar
0
Обзор читал по диагонали. Автор в курсе что надо диод отпаять, если используется не аккумулятор, а батарейка?
+
avatar
  • Oregu
  • 05 марта 2016, 21:57
+1
В этом модуле косяк с литиевой батареей. Она всегда подзаряжается от напряжения питания модуля. Нужно выпаять резистор или диод.
+
avatar
0
чтото такое читал, если поставить аккумулятор то ок будет?
+
avatar
  • Oregu
  • 05 марта 2016, 22:12
+1
Точно не подскажу, поскольку «знал, но забыл». На каком-то импортном форуме было исследование этого модуля и вроде как народ пришел к мысли, что ни батарея, ни аккумулятор долго жить не будут. В даташите на микросхему часов указана батарея, без цепей заряда. Заряд добавили добрые китайцы, и вроде как неправильно (с перезарядом аккумулятора). Но часы имеют очень низкое потребление электроэнергии, поэтому я считаю самым правильным отключить цепи заряда и использовать батарею, которая умрет сначала от саморазряда, а потом от разряда часами))
+
avatar
0
благодарю, отпаяю что то и добавлю ваш комент в обзор, вы все правильно говорите, просто я читал на английском и думал, что я чтото не так понял) судя по наличию чипа памяти этот модуль какаято сплошная ошибка) но всеравно лучше остальных, наверно
+
avatar
0
возможно также стоит выпаять светодиод питания?
+
avatar
  • Oregu
  • 05 марта 2016, 22:47
+1
он от батареи не запитывается, только от Vcc
+
avatar
  • ewavr
  • 05 марта 2016, 23:33
0
Если ставить аккумулятор, придется подбирать под него наряжение питания, так как схема зарядки весьма примитивна. Лучше тогда уж поставить ионистор, неделю без питания он потянет точно.
+
avatar
  • Oregu
  • 06 марта 2016, 00:04
0
есть уже готовые модули с ионисторами. Кстати по размерам гораздо меньше обозреваемого модуля.
+
avatar
  • ewavr
  • 06 марта 2016, 00:31
0
Похоже, что это таки батарейка. Для ионистора нужна цепь зарядки (диод как минимум), тут его нет. Вот на этом фото угадывается надпись «Lit....», т.е. lithium.
+
avatar
  • Oregu
  • 06 марта 2016, 00:31
0
Точно, перепутал.
+
avatar
+1
Автор данной статьи как раз упоминает использование ионистра.
edwardmallon.wordpress.com/2014/05/21/using-a-cheap-3-ds3231-rtc-at24c32-eeprom-from-ebay/
+
avatar
0
Подскажите новичку. Можно-ли этот блок использовать без ардуины ( или как нибудь снимать секундный импульс), например с отечественными (или с аналогами) компонентами типа к176ИЕ3, к176ИЕ4 или что-то подобным, для отображения часов на LED дисплей. Что нибудь попроще и подешевле. Или это в принципе не возможно?
+
avatar
0
Или подсоединить такой блок напрямую «дисплей модуль с часами TM1637» aliexpress.com/item/4-Four-Digital-Display-With-Adjustable-Brightness-LED-Module-Clock-Point-Accessories-Blocks-for-arduino-DIY/32315750039.html
+
avatar
0
Нет, нельзя без микроконтроллера.
+
avatar
+1
Этот модуль без микроконтроллера использовать не получится, он работет по протоколу i2c, аппаратно реализовать его будет сложно. Для часов на дискретных элементах без микроконтроллера доступно кмк только синхронизация по радио.
А вообще самое дешевое это взять этот модуль за 40р да микроконтроллер(да хотя бы ардуино микро или нано, не обязательно голый) за 200р и на этом уже собрать синхронизатор для ваших часов. Или даже всю плату управления часами.
+
avatar
  • Naevus
  • 06 марта 2016, 06:07
0
Ардуина у китайцев стоит меньше 2 долларов. Куда уж проще и дешевле?
или вам нужно оживить что то советскопромышленное типа Электроника 7? (у самого на работе такие люминифором помирают). Тогда совет sereginsk-а вполне разумен.
А если взять всместо ардуины esp826 (обозревалась не раз), то помимо RTC можно еще и синхро с ntp сделать (я в свои часы так и не поставил rtc — третий месяц работают по ntp.

2LogicKiller — там в библиотеке Time есть команда, которая по описанию «выполняет синхронизацию автоматически через заданое время». Т.е. у вас ардуина получила время из РТЦ и пошла считать время своим кварцем. Который, мало того что китайский, так еще и не кратный 32768 (или сколько там у часов кварц?). А если дать эту команду, то раз в указанное количество милискеунд «внутрение» часы ардуины будут подгоняться под Rtc. (ну по крайней мере я так понял из описания):
geektimes.ru/post/264110/
функция,
setSyncInterval(interval);
которая позволяет задать нужный интервал между синхронизациями (задаётся в секундах, сами синхронизации происходят автоматически, без какого-либо участия с вашей стороны).
+
avatar
0
А я пошёл другим путём.
Использовал самый дешёвый GPS модуль с антенной. (5$ = 378р.)
aliexpress.com/item/NEO6M-V2-new-GPS-module-with-Flight-Control-Flight-Control-EEPROM-MWC-APM2-5-large-antenna/32564560960.html
С него и снимаю показания времени. Получаются самые точные, автономные часы.
Собираю сейчас один проект, долгоиграющий. Через пару месяцев запилю обзор.
+
avatar
  • Dimon_
  • 06 марта 2016, 07:31
0
Да, идея очевидна, поддерживаю. У меня уже третий проект на этой идее. Тоже, думаю, к концу весны обзорчик напишу…
+
avatar
0
не подскажите, есть ли на али какойто i2c hub, по сути просто 4х контактный клемник
iarduino.ru/shop/Expansion-payments/i2c-hub-trema-modul.html
по такому запросу на али выдает какуюто микросхему, явно не то, неужто только самому делать.
+
avatar
0
я такпонял синхронизация по умолчанию каждые 5 минут, если нужен другой интервал, то используется функция. На сколько примерно уходит встроенный кварц?
+
avatar
  • Naevus
  • 06 марта 2016, 12:57
0
Уход встроенного кварца наверняка зависит от конкретного экземпляра.Но, надеюсь, всяко меньше 1с за 5 минут, так что если 5мин — интервал по умолчанию, то его должно вполне хватать.
+
avatar
0
я имею ввиду как узнать что регулярная синхронизация происходит?
+
avatar
  • pc_boy
  • 06 марта 2016, 17:22
+4

Уважаемое сообщество, на ваш суд предлагаю прототип своей метеостанции на Arduino.
Процессор: Atmega328.
Переходная плата с 5 вольт на 3 вольта.
Индикация:
— Время. (DS3231)
— День недели/месяц/число/год. (DS3231)
— Температура в помещении. (BMP180)
— Температура на улице. (DS18B20)
— Давление. (BMP180)
— Влажность в помещении. (Si7021)
С левой стороны на графиках отображение максимальной и минимальной температуры за сутки. Графики меняют свой масштаб в зависимости от показаний.
что еще будет.
— Индикация фаз луны.(это очень важно при общении с женским полом, хотя этого мало, надо еще знать положение Марса относительно Сатурна. :) )
— FM радио на базе модуля (RDA5807M).
— Будильник, будет включать радио.
— Можно еще голосовой модуль поставить (WTV020) будет кукукать и время сообщать. Ра работе сообщать об обеде и начале перекура.
Все датчики и FM радио работают по шине i2c. Только 18b20 по 1-Wire.
Дисплей управляется по spi.
Все это чудо стоит на подоконнике возле газ плиты. Поэтому влажность так скачет. А по верхнему графику видно когда открывали окно для проветрывания.
Опрос датчиков идет каждые 15 секунд.
График обновляется раз в 15 минут. За 1 час 4 раза. Каждая вертикальная полоска соответствует одному часу. Вот и видно динамику изменения показаний за сутки.
Значение графиков заносятся в eeprom атмеги, тоже каждые 15 минут.
При количестве циклов чтения/записи в 100,000. Должно хватить на 2,8 года. ну посмотрим. Можно и раз в час писать.
Заказал коробочки, жду. Вот когда все соберется в кучу, ждите обзора. Проект будет открытый для всех.
Может и энтузиастов найду. Вместе будет веселее. Можно же добавить шкурки для оформления. Выводить разные экраны(графики, только большие значения датчиков, только FM радио с RDS информацией.)
Стоимость всех комплектующих около 20$-25$.

P.S.
Вот такой пока я вижу метеостанцию. А дальше можно и скорость ветра мерить и wifi прицепить и датчики беспроводные.
+
avatar
0
ну это будет мега проект) жду обзор)
я смотрю вы удалили наклейку с датчика влажности, вроде как ненужно было так делать, а с модуля часов чтото выпаивали?
почему температура с BMP180, а не Si7021?
+
avatar
  • pc_boy
  • 07 марта 2016, 18:16
0
Мда, почитал даташит Si7021. Наклеечку с датчика можно было и не удалять. А с модуля часов ничего не отпаивал. Просто я не запаивал гребенку из 4 штырьков. А температуру просто взял с BMP180 и не задумывался что с Si7021 то же можно получить температуру. Ну просто BMP180 был первый подключен.
+
avatar
0
если будет желание сравните показания, у меня bmp180 добавлял всегда около пол градуса
+
avatar
0
Достойно. Рекомендую питание развести короткими проводками одножильными 0.5-0.7мм, чтобы аккуратнее смотрелось.
+
avatar
  • pc_boy
  • 07 марта 2016, 18:18
0
Согласен. Но это прототип. Собрал по быстрому. И вот как обычно уже месяца 3 как работают в таком виде. Но жду корпус. И все это приобретет законченный вид.
+
avatar
  • Johnny
  • 06 марта 2016, 19:01
0
Дисплей с графиками особенно порадовал.
+
avatar
0
Я дуб дубом в программировании. Но вопрос.
У Atmega328Р вроде 1к память и вряд ли вы используете её всю.
На сколько понимаю, 100.000 циклов чтения/записи всё же указано на одну ячейку памяти.
Может внести ещё переменные, чтоб они всё время смещали адреса записанных данных. Так будет использоваться весь объём памяти. И следовательно ресурс её возрастёт многократно.

И можете в личку кинуть скетч?
Я только начал разбираться с данными контроллерами. Собираю один проект но знаний катастрофически не хватает. Поэтому беру куски кодов с разных скетчей и собираю свой. И вот как раз работа с постоянной памятью меня сейчас и интересует.
+
avatar
  • Oregu
  • 07 марта 2016, 15:57
0
100.000 циклов перезаписи одной ячейки атмел гарантирует. Люди ставили опыты — перезаписывали одну и ту же ячейку, подсчитывали число операций записи и проверяли считыванием, что в ячейке а самом деле хранится. Через несколько часов у кого-то за миллион циклов перевалило. собственно опыт может поставить каждый, испортив например десяток последних ячеек, которые вряд ли когда-то задействуются в реальном проекте.
+
avatar
  • pc_boy
  • 07 марта 2016, 19:08
0
Скетч очень плохо комментирован, и разобраться в нем будет нелегко. Уж поверьте. Программу надо
оптимизировать, очень мало остается флэш и ОЗУ.
С EEPROM работаю так:

#include <EEPROM.h> //Needed to access the eeprom read write functions
//This function will write a 2 byte integer to the eeprom at the specified address and address + 1
void EEPROMWriteInt(int p_address, int p_value)
{
  byte lowByte = ((p_value >> 0) & 0xFF);
  byte highByte = ((p_value >> 8) & 0xFF);

  EEPROM.update(p_address, lowByte);
  EEPROM.update(p_address + 1, highByte);
}

//This function will read a 2 byte integer from the eeprom at the specified address and address + 1
unsigned int EEPROMReadInt(int p_address)
{
  byte lowByte = EEPROM.read(p_address);
  byte highByte = EEPROM.read(p_address + 1);

  return ((lowByte << 0) & 0xFF) + ((highByte << 8) & 0xFF00);
}

+
avatar
0
DEL
+
avatar
0
Температуру в помещении однозначно лучше брать с датчика Si7021, так как у него точность в диапазоне -10… 85 °С типовая ±0,3 °С (±0,4 °С максимум), а у датчика BMP180 точность в диапазоне 0… 65 °С типовая ±1,0 °С (±2,0 °С миксимальная).
Ну и с датчика Si7021 вы зря защитную наклейку оторвали. Пыль попадёт и точность показаний уменьшится.
P.S. Упс, уже всё это сказали, ну — повторение, мать учения…
+
avatar
0
Может кто подскажет как соединить эти три блока проводами( типа рисунок), чтобы получить часы с LED дисплеем, или надо ещё какие блоки? (блок питания или ещё что?). И будет –ли это работать без настроек, или надо лесть в мозги (для меня это тёмный лес). Спасибо.



aliexpress.com/item/DS3231-AT24C32-IIC-Module-Precision-Real-Time-Clock-Memory-Module-For-Arduino/1984693922.html
aliexpress.com/item/Freeshipping-1pcs-lot-Welded-Nano-3-0-controller-compatible-for-arduino-nano-CH340-USB-driver-NO/32524137828.html
+
avatar
0
нужно от чегото питать ардуину, нужны бибилиотека под дисплей и под часы. Потом в АрдуиноИД пишете скетч и описываете там опрос времени с модуля часов и вывод его на дисплей, модуль часов позволяет только получить время, батарейка только чтоб часы шли без питания на ардуине. как подключить дисплей погуглите, часы подключаются как у меня.
+
avatar
0
Дайте ссылку на библиотеку LCD_1602_RUS.h
А то скачал, но мне выдаёт кучу ошибок такого типа:
C:\Users\Администратор\Documents\Arduino\libraries\LCD_1602_RUS-master/
LCD_1602_RUS.h:83:14: error: 'byte' does not name a type  extern const byte rus_B[];
и т.д.