ESP32 — сердце вашего IoT-проекта


ESP32

Системы умного дома и самые разные другие проекты интернета вещей (IoT) требуют микроконтроллера, оборудованного беспроводным интерфейсом. В настоящее время, именно микроконтроллер ESP32 (разработка компании Espressif Systems) может стать сердцем вашего следующего IoT-проекта.

Микроконтроллер ESP32 — стал развитием популярного МК ESP8266, который был оборудован только Wi-Fi.
Сам ESP32 -это система на кристалле (SoC) с интегрированными Wi-Fi и Bluetooth.
Хорошая вычислительная способность, развитая периферия и низкая цена обеспечили ESP32 заслуженную популярность.

Характеристики
Микроконтроллер имеет 32-битное ядро Tensilica Xtensa LX6 (есть версии с одним (200 MIPS) и двумя (400 MIPS) ядрами)
• частота 160 МГц (ESP32-S0WD, ESP32-D2WD, ESP32-U4WDH) или 240 МГц
• 448 KB ROM
• 520 KB SRAM
• 16 KB SRAM in RTC
• Внешняя флэш память до 4-16 Мб (QSPI и SRAM)
• питание 2.3 — 3.6 V

Беспроводные интерфейсы
• Wi-Fi (802.11 b/g/n)
• Bluetooth v4.2 BR/EDR and BLE

Интерфейсы
• 34 GPIO
• 12-bit АЦП (до 18 каналов)
• 2 × 8-bit ЦАП
• 10 × (порты в режиме сенсорных кнопок)
• 4 × SPI
• 2 × I²S
• 2 × I²C
• 3 × UART
• 1 host (SD/eMMC/SDIO)
• 1 slave (SDIO/SPI)
• Ethernet MAC interface with dedicated DMA and IEEE 1588 support
• Two-Wire Automotive Interface (TWAI®, compatible with ISO11898-1)
• IR (TX/RX)
• Motor PWM
• LED PWM (до 16 каналов)
• Hall sensor

Энергопотребление
• Потребление при передаче Wi-Fi — 180-240 мА
• Потребление при приёме Wi-Fi — ~100 мА
• Потребление при передаче Bluetooth — 130 мА
• Потребление при приёме Bluetooth — ~100 мА
• Потребление без включенного Wi-Fi и Bluetooth — 20-68 мА
• LightSleep — 0.8 мА
• DeepSleep — до 10-150 мкА
• Режим гибернации (с активным RTC) — 5 мкА

Программирование ESP32

Программирование ESP32 на C++ легко осуществляется через Arduino IDE.
Скачав последнюю версию Arduino IDE, нужно выполнить следующие настройки:

1. Зайти в пункт «Настройки»: File > Preferences
и в поле «Additional Board Manager URLs» добавить:

https://dl.espressif.com/dl/package_esp32_index.json

и нажать Ok.
2. Перейти в Менеджер плат: «Tools > Board > Boards Manager…»
Выполнить поиск ESP32 и нажать кнопку установки (Install) для «ESP32 by Espressif Systems»
3. После установки выбрать модель вашей платы («Tools > Board») и последовательный порт («Tools > Port»)
4. Для проверки работы можно загрузить пример, выполняющий сканирование доступных Wi-Fi сетей: «File > Examples > WiFi (ESP32) > WiFiScan».

При попытке компиляции под ОС Linux (Ubuntu) — возможно будут выпадать ошибки. Чтобы всё получилось — достаточно установить пакеты python-is-python3 и python3-serial.

Для IoT-проекта важно, что можно использовать ESP32 в режиме низкого энергопотребления (DeepSleep), работу которого можно увидеть в примере TimerWakeUp, который показывает как МК может просыпаться через заданные промежутки времени (по таймеру).

/*
Simple Deep Sleep with Timer Wake Up
=====================================
ESP32 offers a deep sleep mode for effective power
saving as power is an important factor for IoT
applications. In this mode CPUs, most of the RAM,
and all the digital peripherals which are clocked
from APB_CLK are powered off. The only parts of
the chip which can still be powered on are:
RTC controller, RTC peripherals ,and RTC memories

This code displays the most basic deep sleep with
a timer to wake it up and how to store data in
RTC memory to use it over reboots

This code is under Public Domain License.

Author:
Pranav Cherukupalli <[email protected]>
*/

#define uS_TO_S_FACTOR 1000000ULL  /* Conversion factor for micro seconds to seconds */
#define TIME_TO_SLEEP  5        /* Time ESP32 will go to sleep (in seconds) */

RTC_DATA_ATTR int bootCount = 0;

/*
Method to print the reason by which ESP32
has been awaken from sleep
*/
void print_wakeup_reason(){
  esp_sleep_wakeup_cause_t wakeup_reason;

  wakeup_reason = esp_sleep_get_wakeup_cause();

  switch(wakeup_reason)
  {
    case ESP_SLEEP_WAKEUP_EXT0 : Serial.println("Wakeup caused by external signal using RTC_IO"); break;
    case ESP_SLEEP_WAKEUP_EXT1 : Serial.println("Wakeup caused by external signal using RTC_CNTL"); break;
    case ESP_SLEEP_WAKEUP_TIMER : Serial.println("Wakeup caused by timer"); break;
    case ESP_SLEEP_WAKEUP_TOUCHPAD : Serial.println("Wakeup caused by touchpad"); break;
    case ESP_SLEEP_WAKEUP_ULP : Serial.println("Wakeup caused by ULP program"); break;
    default : Serial.printf("Wakeup was not caused by deep sleep: %d\n",wakeup_reason); break;
  }
}

void setup(){
  Serial.begin(115200);
  delay(1000); //Take some time to open up the Serial Monitor

  //Increment boot number and print it every reboot
  ++bootCount;
  Serial.println("Boot number: " + String(bootCount));

  //Print the wakeup reason for ESP32
  print_wakeup_reason();

  /*
  First we configure the wake up source
  We set our ESP32 to wake up every 5 seconds
  */
  esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
  Serial.println("Setup ESP32 to sleep for every " + String(TIME_TO_SLEEP) +
  " Seconds");

  /*
  Next we decide what all peripherals to shut down/keep on
  By default, ESP32 will automatically power down the peripherals
  not needed by the wakeup source, but if you want to be a poweruser
  this is for you. Read in detail at the API docs
  http://esp-idf.readthedocs.io/en/latest/api-reference/system/deep_sleep.html
  Left the line commented as an example of how to configure peripherals.
  The line below turns off all RTC peripherals in deep sleep.
  */
  //esp_deep_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_OFF);
  //Serial.println("Configured all RTC Peripherals to be powered down in sleep");

  /*
  Now that we have setup a wake cause and if needed setup the
  peripherals state in deep sleep, we can now start going to
  deep sleep.
  In the case that no wake up sources were provided but deep
  sleep was started, it will sleep forever unless hardware
  reset occurs.
  */
  Serial.println("Going to sleep now");
  Serial.flush(); 
  esp_deep_sleep_start();
  Serial.println("This will never be printed");
}

void loop(){
  //This is not going to be called
}

Заключение

Характеристики и доступная цена ESP32 делают его кандидатом №1, чтобы стать сердцем вашего следующего IoT-проекта, где требуется использовать Wi-Fi или Bluetooth.

Ссылки
ESP32
ESP32 datasheet
Arduino core for the ESP32
ESP32. Arduino code for Deep Sleep and wake-ups (Timer, Touch Pad, GPIO …)
ESP32 WROOM DevKit v1: распиновка, схема подключения и программирование

По теме
От Arduino к STM32
Исследование Wi-Fi-роутера TP-LINK TL-MR3020


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

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Android Arduino Bluetooth CraftDuino DIY IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд юмор

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение