Библиотеки ардуино

Запись целых чисел

Запись целых чисел в энергонезависимую память EEPROM осуществить достаточно просто. Внесение чисел происходит с запуском функции EEPROM.write(). В скобках указываются необходимые данные. При этом числа от 0 до 255 и числа свыше 255 записываются по-разному. Первые вносятся просто – их объем занимает 1 байт, то есть одну ячейку. Для записи вторых необходимо использовать операторов highByte() высший байт и lowByte() низший байт.

Число делится на байты и записывается отдельно по ячейкам. Например, число 789 запишется в две ячейки: в первую пойдет множитель 3, а во вторую – недостающее значение. В итоге получается необходимое значение:

3 * 256 + 21 = 789

Для воссоединения» большого целого числа применяется функция word(): int val = word(hi, low). Нужно читывать, что максимальное целое число для записи – 65536 (то есть 2 в степени 16). В ячейках, в которых еще не было иных записей, на мониторе будут стоять цифры 255 в каждой.

Запись чисел с плавающей запятой и строк

Числа с плавающей запятой и строк – это форма записи действительных чисел, где они представляются из мантиссы и показателя степени. Запись таких чисел в энергонезависимую память EEPROM производится с активацией функции EEPROM.put(), считывание, соответственно, – EEPROM.get().

При программировании числовые значения с плавающей запятой обозначаются, как float, стоит отметить, что это не команда, а именно число. Тип Char (символьный тип) – используется для обозначения строк. Процесс записи  чисел на мониторе запускается при помощи setup(), считывание – с помощью loop().

В процессе на экране монитора могут появиться значения ovf, что значит «переполнено», и nan, что значит «отсутствует числовое значение». Это говорит о том, что записанная в ячейку информация не может быть воспроизведена, как число с плавающей точкой. Такой ситуации не возникнет, если достоверно знать, в какой ячейке какой тип информации записан.

Recent Articles

  1. Learn how to use the TP4056 properly. There’s a right way, and a wrong way, to use it to safely charge Lithium Ion batteries.

  2. A tutorial on using the ADS1115 precision 16 bit ADC for low power use.

  3. Arduino Nano ISP: How to program an ATmega328P using an Arduino Nano as the ISP programmmer. One common problem: Programming a sketch into the chip without a reset control — solved here.

  4. I2C tutorial: Learn all about the 2 wire I2C serial protocol. Learn how easy it is to use, how it works and when to use it…

  5. How to test and use an Arduino Joystick including a new library to make it super easy.

  6. How to use the MCP4728, a versatile four channel DAC with built in voltage reference.

    The MCP4728 chip is a four channel 12 bit DAC, with memory that outputs voltage that you can use for calibration, anywhere you want a fixed voltage.

Single Type Method Sketch1

The Idea here is to store a set of simple type variables sequentially in the EEPROM at a specific EEPROM address.

Just attach a push button connected to ground and pin 5 of the
Arduino. On start up the EEPROM values are retrieved from the EEPROM and
sent to serial Monitor.

When you push the button random values are saved to the EEPROM. To
retrieve the values simply press the reset button on the Arduino and
these same numbers are displayed (having been read from the EEPROM).

When you hit the button you can also see write execution time.

Copy Sketch

Here’s an example of the output from the serial monitor:

Press button to write to EEPROM
EEPROM Written
MIN x 58478
MAX x 58479
MIN y 58480
MAX y 58481
EEPROM Write time  (us) 23300
EEPROM Write time per byte (us) 2912
Press button to write to EEPROM
Press button to write to EEPROM
Press button to write to EEPROM
Press button to write to EEPROM
EEPROM variable read and write.
MIN x 58478
MAX x 58479
MIN y 58480
MAX y 58481
Press button to write to EEPROM

Constructor

###extEEPROM(eeprom_size_t devCap, byte nDev, unsigned int pgSize, byte busAddr)
#####Description
Instantiates an external EEPROM object.
#####Syntax

#####Parameters
devCap (eeprom_size_t): The size of one EEPROM device in k-bits. Choose a value from the eeprom_size_t enumeration above.nDev (byte): The number of EEPROM devices on the bus. Note that if there are multiple EEPROM devices on the bus, they must be identical and each must have its address pins strapped properly.pgSize (unsigned int): The EEPROM page size in bytes. Consult the datasheet if you are unsure of the page size.busAddr (byte): The base I2C bus address for the EEPROM(s). 0x50 is a common value and this parameter can be omitted, in which case 0x50 will be used as the default.
#####Example

extEEPROM myEEPROM(kbits_256, 2, 64);			//two 24LC256 EEPROMS on the bus
extEEPROM oddEEPROM(kbits_8, 1, 16, 0x42);		//an EEPROM with a non-standard I2C address

Подключение Arduino Nano

Подключение платы Arduino Nano к компьютеру не представляет особого труда – оно аналогично обычной плате Uno. Единственная сложность может возникнуть при работе с платой на базе чипа ATMEGA 168 – в настройках нужно выбрать сперва плату Nano, а затем нужный вариант процессора.

Установка драйвера для CH340

Микросхема CH340 часто используется в платах Ардуино со встроенным USB-to-Serial преобразователем. Она позволяет уменьшить затраты на производство плат, не влияя на ее работоспособность. При  помощи этого программатора можно легко прошивать платы Ардуино. Для того, чтобы начать работать с этой микросхемой, нужно установить драйвер на компьютер.

Установка выполняется в несколько этапов:

Настройка Arduino IDE

Стандартная среда разработки Arduino IDE используется для работы всех видов Ардуино с компьютером. Чтобы начать работу, нужно сначала скачать Arduino IDE с официального сайта и установить ее. Удобнее скачивать Windows Installer, особенно если среда разработки будет установлена на постоянном рабочем компьютере. Если скачан архив, то его нужно распаковать и запустить файл Arduino.exe.

Как только среда установлена, нужно ее запустить. Для этого нужно подключить к компьютеру саму плату Ардуино через USB. Затем перейти в меню Пуск >> Панель управления >> Диспетчер устройств, найти там Порты COM и LPT. В списке появится установленная плата и указан номер порта, к которому подключается плата.

После этого нужно запустить Arduino IDE, перейти в меню Инструменты >> Порт, и указать порт, к которому присоединена Ардуино.  В меня Инструменты>> Платы нужно выбрать модель подключенной платы, в данном случае Arduino Nano. Если у вас плата Nano версии 2.0, то вам нужно также выбрать вариант процессора в соответствующем меню.

Важно помнить, что если к компьютеру будет подключаться другая плата, настройки снова нужно будет поменять на соответствующее устройство

Для чего это нужно?

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

который помнит свою позицию или сколько осталось боеприпасов. Вы можете использовать его для управления своими приборами

и зарегистрируйте, сколько раз ваше устройство было активировано.

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

(со встроенным SD-слотом) или Raspberry Pi

,

Macro Definition Documentation

#define __EEGET (   var,
  addr 
)    (var) = ((const *)(addr))

Read a byte from EEPROM. Compatibility define for IAR C.

#define __EEPUT (   addr,
  val 
)     (( *)(addr), ()(val))

Write a byte to EEPROM. Compatibility define for IAR C.

#define _EEGET (   var,
  addr 
)    (var) = ((const *)(addr))

Read a byte from EEPROM. Compatibility define for IAR C.

#define _EEPUT (   addr,
  val 
)     (( *)(addr), ()(val))

Write a byte to EEPROM. Compatibility define for IAR C.

#define EEMEM   ((section(«.eeprom»)))

Attribute expression causing a variable to be allocated within the .eeprom section.

#define eeprom_busy_wait ( )    do {} while (!())

Loops until the eeprom is no longer busy.

Returns
Nothing.
#define eeprom_is_ready ( )
Returns
1 if EEPROM is ready for a new read/write operation, 0 if not.

Полезные советы при работе с Arduino

Работа с текстовыми файлами

При дальнейшей работе с Arduino вам часто придётся разбираться с файлами библиотек (смотреть список методов или писать свои библиотеки), поэтому нужно сделать две очень важные вещи: включить отображение расширений файлов и скачать блокнот++. Блокнот++ удобнее обычного блокнота и имеет кучу фишек, например распознаёт “язык кода” и подсвечивает синтаксис.

Далее необходимо включить отображение расширений у файлов, чтобы знать, что перед вами за зверь. Краткая инструкция для Windows 7 и 10.

После этого делаем нужные файлы открываемыми по умолчанию в Notepad++

Написание текста программы

Автоформатирование – Arduino IDE умеет автоматически приводить ваш код в порядок (имеются в виду отступы, переносы строк и пробелы). Для автоматического форматирования используйте комбинацию CTRL+T на клавиатуре, либо Инструменты/АвтоФорматирование в окне IDE. Используйте чаще, чтобы сделать код красивым (каноничным, классическим) и более читаемым для других!

Скрытие частей кода – сворачивайте длинные функции и прочие куски кода для экономии места и времени на скроллинг. Включается здесь: Файл/Настройки/Включить сворачивание кода

Не используйте мышку! Чем выше становится ваш навык в программировании, тем меньше вы будете использовать мышку (да-да, как в фильмах про хакеров). Используйте обе руки для написания кода и перемещения по нему, вот вам несколько полезных комбинаций и хаков, которыми я пользуюсь ПОСТОЯННО:

  • Ctrl+← , Ctrl+→ – переместить курсор влево/вправо НА ОДНО СЛОВО
  • Home , End – переместить курсор в начало/конец строки
  • Shift+← , Shift+→ – выделить символ слева/справа от курсора
  • Shift+Ctrl+← , Shift+Ctrl+→ – выделить слово слева/справа от курсора
  • Shift+Home , Shift+End – выделить все символы от текущего положения курсора до начала/конца строки
  • Ctrl+Z – отменить последнее действие
  • Ctrl+Y – повторить отменённое действие
  • Ctrl+C – копировать выделенный текст
  • Ctrl+X – вырезать выделенный текст
  • Ctrl+V – вставить текст из буфера обмена
  • Ctrl+U – загрузить прошивку в Arduino
  • Ctrl+R – скомпилировать (проверить)
  • Ctrl+Shift+M – открыть монитор порта

Также для отодвигания комментариев в правую часть кода используйте TAB, а не ПРОБЕЛ. Нажатие TAB перемещает курсор по некоторой таблице, из-за чего ваши комментарии будут установлены красиво на одном расстоянии за вдвое меньшее количество нажатий!

Хаки с питанием

Питание от пинов – во время разработки прототипов без брэдборда всегда не хватает пинов для питания датчиков и модулей. Так вот, слабые (с потреблением тока менее 40 мА ) 5 Вольтовые датчики можно питать от любых пинов! Достаточно сформировать пин как выход, и подать на него нужный сигнал (HIGH – 5 Вольт, LOW – GND).

Пример: подключаем трёхпиновый датчик звука, не используя пины 5V и GND

Питание от штекера для программатора. Вы наверняка задавались вопросом, а зачем на Arduino NANO на краю платы расположены 6 пинов? Это порт для подключения ISP программатора. Что он делает в списке лайфхаков? Вот вам фото распиновки, используйте!

Энергосбережение

Использовать библиотеку энергосбережения Low Power. Примеры и описание внутри (видео урок пока не готов)

В паре с библиотекой сделать несколько модификаций: отключить светодиод питания и отрезать левую ногу регулятора напряжения

ВНИМАНИЕ! Резать ногу регулятору можно только в том случае, если плата питается от источника 3-5 Вольт в пины 5V и GND

Модификации оборудования

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

Arduino UNO — отличная платформа, которая позволяет пользователям создавать и тестировать бесчисленное количество устройств. Однако создатели не очень позаботилась об энергопотреблении данной платы.

Если вы запускаете свой проект от источника питания 12 В, то он потребляет более 50 мА тока. Понизив напряжение до 9-вольтовой батареи, вы можете уменьшить потребляемый ток примерно до 33 мА. При этом вы будете часто менять батарейки, что не очень удобно, если вы делаете автономный проект.

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

Например, учитывая, что светодиод может потреблять до 2 мА, вы можете полностью удалить все светодиоды.

Кроме того, питание подключенных устройств через порт ввода-вывода (I/O, Input/Output) позволяет выключать устройство, когда оно не используется.

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

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

Кроме того, некоторые устройства, такие как часы реального времени (RTC), должны оставаться включенными, и вы должны знать о текущих ограничениях порта ввода-вывода (примерно 40 мА).

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

Таким образом, при работе вашего Ардуино Уно от батареи 9 В регулятор превращает лишние 4 В в тепло. При этом около 44% энергии расходуется на тепло, и даже больше, если вы используете источник питания 12 В.

Показанное ниже устройство представляет собой понижающий преобразователь DROK DC 4.5-24, который значительно более эффективен, чем линейный регулятор, используемый на UNO.

Схема должна работать с любым понижающим преобразователем, который имеет выход 5 В или 3,3 В, что дает дополнительное преимущество, поскольку вы можете отключить выходную мощность, просто заземлив желтый EN (включить) вывод.

На схеме черный провод — это масса (общее заземление), а красный — входное напряжение. Этот конкретный блок работает до 24 В (в зависимости от вашего понижающего преобразователя), зеленый — выходное напряжение.

Еще одна приятная особенность — он также поддерживает 3,3 В. В обход встроенного регулятора напряжения ток снижается с 52 мА до примерно 23 мА при 5 В.

Обратите внимание, что выход идет на штекер 5 В от понижающего преобразователя. Если вы решите запустить Arduino на 3,3 В, используйте также подключение 5 В

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

Arduino Nano Pinout

  • Each pin on the Nano board comes with a specific function associated with it.
  • We can see the analog pins that can be used as an analog to a digital converter, where A4 and A5 pins can also be used for I2C communication.
  • Similarly, there are 14 digital pins, out of which 6 pins are used for generating PWM.

Let’s have a look at the Arduino Nano Pinout in detail:

Arduino Nano Power Pins

Vin: It is input power supply voltage to the board when using an external power source of 7 to 12 V.

5V: It is a regulated power supply voltage of the board that is used to power the controller and other components placed on the board.

3V3: This is a minimum voltage generated by the voltage regulator on the nano board.

  • GND Pin: These are the ground pins on the board.
  • There are multiple ground pins on the board that can be interfaced accordingly when more than one ground pin is required.

Arduino Nano Function Pins

Reset Pin: Arduino Nano has 2 reset pins incorporated on the board, making any of these Reset pins LOW will reset the microcontroller.

  • Pin#13: A built-in LED is connected to pin#13 of nano board.
  • This LED is used to check the board i.e. it’s working fine or not.
  • AREF: This pin is used as a reference voltage for the input voltage.

Arduino Nano I/O Pins

  • Analog Pins: There are 8 analog pins on the board marked as A0 – A7.
  • These pins are used to measure the analog voltage ranging between 0 to 5V.

  • Digital Pins: Arduino Nano has 14 digital pins starting from D0 to D13.
  • These digital pins are used for interfacing third-party digital sensors and modules with Nano board.
  • PWM Pins: Arduino Nano has 6 PWM pins, which are Pin#3, 5, 6, 9, 10 and 11. (All are digital pins)
  • These pins are used to generate an 8-bit PWM (Pulse Width Modulation) signal.
  • External Interrupts: Pin#2 and 3 are used for generating external interrupts normally used in case of emergency, when we need to stop the main program and call important instructions.
  • The main program resumes once interrupt instruction is called and executed.

Nano Pinout for Communication Protocols

  • Serial Pins: These pins are used for serial communication where:
    1. Pin#0 is RX used for receiving serial data.
    2. Pin#1 is Tx used for transmitting serial data.
  • SPI Protocol: Four pins 10(SS->Slave Select), 11(MOSI -> Master Out Slave In), 12(MISO -> Master In Slave Out) and 13(SCK -> Serial Clock) are used for SPI (Serial Peripheral Interface) Protocol.
  • SPI is an interface bus and is mainly used to transfer data between microcontrollers and other peripherals like sensors, registers, and SD cards.
  • I2C Protocol: I2C communication is developed using A4 and A5 pins, where A4 represents the serial data line (SDA) which carries the data and A5 represents the serial clock line (SCL) which is a clock signal, generated by the master device, used for data synchronization between the devices on an I2C bus.

Библиотеки в Arduino IDE

Среди всего разнообразия библиотек можно выделить 3 основных группы:

  • Встроенные – это библиотеки, изначально установленные в среде Arduino IDE. Их не нужно скачивать и устанавливать дополнительно, они доступны для использования в программе сразу после запуска среды разработки.
  • Дополнительные – это библиотеки, которые нужно самостоятельно скачивать устанавливать. Обычно такой вид библиотек разрабатывает производитель датчиков, сенсоров и других компонентов для облегчения работы с ардуино.
  • Зависимые библиотеки – устанавливаются как помощник дополнительной библиотеки, отдельно от нее не работает.

Самым простым способом работы с библиотеками в ардуино является использование встроенных возможностей среды разработки Arduino IDE. Об этом мы поговорим в отдельной статье.

5.3 Решение конфликтов библиотек

Иногда случается конфликт библиотек, который заключается в том, что IDE находит на компьютере несколько одинаковых библиотек. Об этом сообщается в логе компиляции предупреждением: “несколько библиотек найдено… используется то, не используется сё“. Если вы ставили некоторые библиотеки через менеджер (Скетч/Подключить библиотеки/Управлять библиотеками…), они будут воевать с библиотеками, установленными вручную в папку с программой. Где вообще лежат библиотеки?

  • Стандартные общие библиотеки – в папке с программой/libraries
    • 64-битная версия Windows – C:\Program Files (x86)\Arduino\libraries\
    • 32-битная версия Windows – C:\Program Files\Arduino\libraries\
  • Установленные через менеджер – Документы\Arduino\libraries
  • Библиотеки для конкретного ядра:
    • Стандартное ядро Arduino – C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries
    • Другие ядра – C:\Users\username\AppData\Local\Arduino15\packages\ядро\hardware\avr\версия\libraries

Конфликтовать могут и ядра, поэтому решением всех проблем может стать чистая установка Arduino IDE с удалением остатков от предыдущей версии. Удаляем программу как программу, и вручную сносим папки:

  • Папка с программой
    • 64-битная версия Windows – C:\Program Files (x86)\Arduino\libraries\
    • 32-битная версия Windows – C:\Program Files\Arduino\libraries\
  • Документы\Arduino\
  • C:\Users\username\AppData\Local\Arduino15\

Applications of Arduino Nano

Arduino Nano is a very useful device that comes with a wide range of applications and covers less space as compared to other Arduino boards. Breadboard-friendly nature makes it stand out from other boards. Following are the main applications of Arduino Nano:

  • Engineering Students’ Projects.
  • Medical Instruments
  • Industrial Automation
  • Android Applications
  • GSM Based Projects
  • Embedded Systems
  • Automation and Robotics
  • Home Automation and Defense Systems
  • Virtual Reality Applications

That’s all for today. I hope you have got a clear idea about the Nano board. However, if still you feel skeptical or have any questions, you can approach me in the comment section below. I’d love to help you according to the best of my knowledge and expertise. Feel free to keep us updated with your valuable feedback and suggestions, they help us provide you quality work that resonates with your requirements and allows you to keep coming back for what we have to offer. Thanks for reading the article.

Host software

The host software is in the hostutil directory. It seems to work, although more testing is needed. Currently, it has only been tested on Linux, but might work on other Unix-like systems (such as MacOS and FreeBSD.)

To build the host software, run the command in the directory. Copy the resulting executable () to a directory that is on your executable path.

The command will print the following usage information:

Here are some basic usage examples.

Write a binary file called to a 32K EEPROM, disabling write protection before writing (necessary if the device is currently write-protected), enabling write protection after writing, and verifying that the data was written correctly:

This command should produce something like the following output:

Note that you should change as appropriate depending on the serial port device assigned to the Arduino.

Reading 32K of data from an EEPROM and saving the data in the output file :

This command should produce something like the following output:

Again, change as appropriate.

Команды библиотеки EEPROM.h Arduino

EEPROM.read(address)
Считывает один байт из EEPROM Arduino по адресу address
EEPROM.write(address, value)
Записывает один байт со значением value в EEPROM по адресу address
EEPROM.update(address, value)
Аналог функции write(), но новые данные в ячейку записываются только тогда, когда они отличаются от уже записанного. Использование данной функции позволяет продлить жизнь памяти EEPROM.
EEPROM.get(address, data)
Считывает из EEPROM Arduino любой тип данных по адресу address. При этом данные (data) могут быть любого типа, например, int или float.
EEPROM.put(address, data)
Записывает в EEPROM Arduino любой тип данных по адресу address. Функция записывает в ячейку только отличающиеся данные.
EEPROM[address]
Позволяет обращаться с байтами EEPROM Arduino как с массивом. Байты можно считывать и записывать.

Arduino EEPROM примеры использования

Для начала рассмотрим запись в EEPROM Arduino числа больше, чем 255, например число 999. При записи в EEPROM число 999 будет разбиваться на множитель (старший байт) и недостающее число (младший байт), занимая при этом уже две ячейки в энергонезависимой памяти (т.е. 999 = 3×256 + 231). Чтобы вывести сохраненное число на монитор порта, его нужно будет «собрать» с помощью функции .

Скетч. Запись в память EEPROM int, float

#include <EEPROM.h>  // импортируем библиотеку    int num = 999;                      // разбиваем число на 2 байта  byte hi  = highByte(num);   // старший байт  byte low = lowByte(num);  // младший байт    void setup() {    Serial.begin(9600);    // запускаем монитор порта       EEPROM.update(1, hi);     // записываем старший байт в ячейку 1     EEPROM.update(2, low); // записываем младший байт в ячейку 2      delay(1000);      byte val1 = EEPROM.read(1);  // считываем 1 байт по адресу ячейки    byte val2 = EEPROM.read(2);  // считываем 1 байт по адресу ячейки      Serial.println("highByte - "+String(val1));  // выводим старший байт на монитор    Serial.println("lowByte  - "+String(val2));  // выводим младший байт на монитор      int NUM = word(hi, low);       // "собираем" число из байтов    Serial.println("int num  - "+String(NUM));    // выводим полученное число  }    void loop() {  }

Пояснения к коду:

  1. для записи данных в ячейку в программе использована функция , которая перезаписывает ячейку только в случае различия сохраняемых данных с данными в ячейке EEPROM Arduino Uno;
  2. основная проблема с сохранением больших чисел (int, float) в память EEPROM заключается в том, чтобы случайно не перезаписать нужную ячейку новой информацией. Для этого нужно учитывать размер сохраняемых данных в ПЗУ, используя функции и .

Скетч. Запись строк в EEPROM (String)

#include <EEPROM.h>  // импортируем библиотеку    int address = 10;  // адрес первой ячейки для записи    long cod = 8904; // разбиваем телефонный номер на две части  long tel = 2768282;  String email = ""; // сохраняем в строке адрес почты    long COD; // создаём новые переменные для чистоты эксперимента  long TEL;  String EMAIL;    void setup() {    Serial.begin(9600);  // запускаем монитор порта      EEPROM.put(address, cod);      // сохраняем код телефона в памяти Ардуино    address += sizeof(cod);              // узнаем адрес следующей свободной ячейки    EEPROM.put(address, tel);       // сохраняем номер телефона в памяти Ардуино    address += sizeof(tel);                // узнаем адрес следующей свободной ячейки    EEPROM.put(address, email);  // сохраняем электронную почту в памяти      address = 10;  // адрес первой ячейки для чтения      Serial.print("Phone: ");  // выводим телефонный номер на монитор    Serial.print(EEPROM.get(address, COD));    address += sizeof(COD);    Serial.println(EEPROM.get(address, TEL));    address += sizeof(TEL);      Serial.print("Email: ");  // выводим электронную почту на монитор    Serial.println(EEPROM.get(address, EMAIL));  }    void loop() {  }

Пояснения к коду:

  1. перед сохранением новых данных в памяти, следует узнать размер данных, которые были сохранены, чтобы начать запись в новой ячейке;
  2. удалив из кода строчки для записи данных, вы можете каждый раз при запуске программы считывать все сохраненные данные из ПЗУ Ардуино.

ESP8266 EEPROM CODE

/*  This code is for the EEPROM in the ESP8266;
     the EEPROM definition in ESP32, Arduino Uno, Mega differs from that of the ESP8266.
EEPROM in Arduino and ESP (ESP8266 and ESP32)
*/ // include EEPROM Library #include<EEPROM.h> /* Defining data storage addresses   As we know size of int is 4 Bytes,    If we store int at index 0 then the next EEPROM address can be anything (4,5..10 etc.) after 4 byte address i.e. (0-3)  You can use this statement to find size of int type data Serial.println(sizeof(int)) */ int eepromAddr1 = , eepromAddr2 = 256; // We store int and String data in the ESP8266's EEPROM. int intData = 1044; String stringData = "My String"; // put is used to write to EEPROM, while read is used to read from it. void setup() {  Serial.begin(115200);  /* Begin with EEPROM by deciding how much EEPROM memory you want to use.     The ESP8266's maximum EEPROM size is 4096 bytes (4 KB), but we're just using 512 bytes here.  */  EEPROM.begin(512);  delay(500);  // User's message  Serial.println("To put int Send → 'int' ");  Serial.println("To put String Send → 'string' ");  Serial.println("To get data Send → 'read' ");  Serial.println("To clear EEPROM Send → 'clear' "); } void loop() {  if (Serial.available()) {    String x = Serial.readString();    delay(10);    Serial.println("");    Serial.print("Input → ");    Serial.println(x);    /* If the user enters 'read' as input,        we will read from the EEPROM using the 'EEPROM get' function.    */    if (x == "read") {      /* We build a function eeprom_read_string(int),          where we simply transfer an address to read from and it returns a string      */      String si = eeprom_read_string(eepromAddr1);      /* After reading from EEPROM, convert String to int,          - 4 is only to see whether it converted or not      */      int data = si.toInt();      Serial.print("Readed Integer: ");      Serial.println(data - 4);      String ss = eeprom_read_string(eepromAddr2);      Serial.print("Readed String: ");      Serial.println(ss);      delay(50);    }    /* if user send 'string' as input        then we will write to EEPROM using 'EEPROM put' function    */    else if (x == "string") {      EEPROM.put(eepromAddr2, stringData);      eeprom_commit();    }    /* If the user enters 'int' as input,         we convert int to string since we created a function to read string from EEPROM         and then use the 'EEPROM put' function to write to EEPROM.    */    else if (x == "int") {      String s = String(intData);      EEPROM.put(eepromAddr1, s);      // It's important to use EEPROM.commit() while writing to EEPROM.      eeprom_commit();    }    /* if user send 'clear' as input        then we will clear data from EEPROM    */    else if (x == "clear") {      for (int i = ; i < 512 ; i++) {        EEPROM.write(i, );      }      // Don't forget EEPROM.end();      EEPROM.end();      Serial.println("EEPROM Clear Done!");    }    /* if user send any other string as input        then display a message to user    */    else {      Serial.println("Wrong Input");    }  } } /* Create a type String function that reads from EEPROM byte by byte,   stores it in a char array, converts it to a string, and returns a String. */ String eeprom_read_string(int address) {  char x255, c;  int i = ;  while (c != NULL) {    xi = EEPROM.read(address);    c = xi;    address++;    i++;  }  String sr = String(x);  return sr; } // Check whether write to EEPROM was successful or not with the EEPROM.commit() function. void eeprom_commit() {  if (EEPROM.commit()) {    Serial.println("EEPROM successfully committed!");  } else {    Serial.println("ERROR! EEPROM commit failed!");  } }

См.также

  1. EEPROM.get()
  2. EEPROM library reference
  3. EEPROM Clear — Fills the content of the EEPROM memory with “0”.
  4. EEPROM Read – Reads values stored into EEPROM and prints them on Serial.
  5. EEPROM Write – Stores values read from A0 into EEPROM.
  6. EEPROM Crc – Calculates the CRC of EEPROM contents as if it was an array.
  7. EEPROM Iteration – Programming examples on how to go through the EEPROM memory locations.
  8. EEPROM Put – Put values in EEPROM using variable semantics (differs from EEPROM.write() ).
  9. EEPROM Update – Stores values read from A0 into EEPROM, writing the value only if different, to increase EEPROM life.

Модули и решения «умного дома» на Ардуино

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

Существует три основных микроконтроллера в системе:

Arduino UNO – средних размеров плата с собственным процессором и памятью. Основа — микроконтроллер ATmega328.  В наличии 14 цифровых входов/выходов (6 из них можно использовать как ШИМ выводы), 6 аналоговых входов, кварцевый резонатор 16 МГц, USB-порт (на некоторых платах USB-B), разъем для внутрисхемного программирования, кнопка RESET. Флэш-память – 32 Кб, оперативная память (SRAM) – 2 Кб, энергонезависимая память (EEPROM) – 1 Кб.

Arduino UNO

Arduino NANO – плата минимальных габаритов с микроконтроллером ATmega328. Отличие от UNO – компактность, за счет используемого типа контактных площадок – так называемого «гребня из ножек».

Arduino Nano

Arduino MEGA – больших размеров плата с микроконтроллером ATMega 2560. Тактовая частота 16 МГц (как и в UNO), цифровых пинов 54 вместо 14, а аналоговых 16, вместо 6. Флэш-память – 256 Кб, SRAM – 8 Кб, EEPROM – 4.

Arduino Mega

Arduino UNO – самая распространённая плата, так как с ней проще работать в плане монтажных работ. Плата NANO меньше в размерах и компактнее – это позволяет разместить ее в любом уголке умного дома. MEGA используется для сложных задач.

Сейчас на рынке представлено 3 поколение плат (R3) Ардуино. Обычно, при покупке платы, в комплект входит обучающий набор для собирания StarterKit, содержащий:

  1. Шаговый двигатель.
  2. Манипулятор управления.
  3. Электросхематическое реле SRD-05VDC-SL-C 5 В.
  4. Беспаечная плата для макета MB-102.
  5. Модуль с картой доступа и и двумя метками.
  6. Звуковой датчик LM393.
  7. Датчик с замером уровня жидкости.
  8. Два простейших устройства отображения цифровой информации.
  9. LCD-дисплей для вывода множества символов.
  10. LED-матрица ТС15-11GWA.
  11. Трехцветный RGB-модуль.
  12. Температурный датчик и измеритель влажности DHT11.
  13. Модуль риал тайм DS1302.
  14. Сервопривод SG-90.
  15. ИК-Пульт ДУ.
  16. Матрица клавиатуры на 16 кнопок.
  17. Микросхема 74HC595N сдвиговый регистр для получения дополнительных выходов.
  18. Основные небольшие компоненты электроники для составления схемы.

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

Сенсоры и датчики

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

Плата дополняется совместимыми датчиками движения или иными PIR-сенсорами, которые определяют присутствие или отсутствие человека в зоне действия, и привязывается через реле к освещению.

Датчик Arduino

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

Газовый датчик Arduino

Реле

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

Реле Arduino

Светодиоды могут указывать состояние, в котором реле находится в данным момент времени. Например, красный – освещение выключено, зеленый – освещение есть. Схема подключение к лампе выглядит так.

Для более крупного проекта лучше применять шину реле, например, восьмиканальный модуль реле 5V.

Контроллер

В качестве контроллера выступает плата Arduino UNO. Для монтажа необходимо знать:

описание элементов;

распиновку платы;

принципиальную схему работы платы;

распиновку микроконтролеера ATMega 328.

Программная настройка

Программирование подключенных элементов Ардуино происходит в редакторе IDE. Скачать его можно с официального сайта. Для программирования можно использовать готовые библиотеки.

Или воспользоваться готовым скетч решением Ardublock – графический язык программирования, встраиваемый в IDE. По сути, вам нужно только скачать и установить ПО, а затем использовать блоки для создания схемы.