ESP32 новый модуль от ESPRESSIF


ESP8266 стал воистину «народным» в мире дешевых интернет вещей. Встречайте ему достойную замену ESP32.
Краткое описание, программирование в Ardiono IDE, примеры читайте в этом обзоре

Начну пожалуй с характеристик ESP32, взятых из официального даташита:

Память и ЦПУ

  • Двухядерный 32-битный микропроцессор Xtensa LX6 160-240МГц
  • ОЗУ — 520Кб
  • ПЗУ — 448Кб
  • Дополнительно RTC таймер с 16Кб ОЗУ
  • Внешняя флэш память 4-16Мб
  • Питание 2.2 — 3.6В

WiFi и Bluetooth

  • WiFi 802.11n 2.4Гц с максимальной скоростью 150Мбит/сек
  • WPA)/WPA2/WPA2-Enterprise/Wi-Fi Protected Setup (WPS
  • Bluetooth v4.2 BR/EDR and BLE

Периферия

  • 12- битный АЦП на 18 портах
  • 8-битный ЦАП на 2 портах
  • 10-портов в режиме сенсорных кнопок
  • Встроенный температурный датчик
  • 4 x SPI
  • 2 x IS1
  • 2 x I2C
  • 3 x UART
  • 1 host (SD/eMMC/SDIO)
  • 1 slave (SDIO/SPI)
  • Ethernet MAC interface with dedicated DMA and IEEE 1588 support
  • CAN 2.0
  • IR (TX/RX)
  • Motor PWM
  • LED PWM up to 16 channels
  • Hall sensor
  • Ultra-low-noise analog pre-amplifier

Защита

  • IEEE 802.11 standard security features all supported, including WFA, WPA/WPA2 and WAPI
  • Secure boot
  • Flash encryption
  • 1024-bit OTP, up to 768-bit for customers
  • Cryptographic hardware acceleration:
    – AES
    – HASH (SHA-2) library
    – RSA
    – ECC
    – Random Number Generator (RNG)

Энергопотребление!

  • Максимальный ток при передаче WiFi — 160-260мА
  • Потребление без включенного WiFi и Bluetooth — 20мА
  • LightSleep — 0.8мА
  • DeepSleep — до 10мкА
  • Режим гибернизации с активным RTC — 5мкА

Я заказал отладочную плату на ESP-WROOM-32 с 16Мб флэша, USB/UART на CP2102 и прошитым загрузчиком




Назначение выводов можно посмотреть здесь

Все для программирование есть у производителя, в его разделе на GITHUB
Там же есть ESP32 CORE для Arduino IDE
Установка под Windows очень проста:
— Устанавливаем Arduino IDE (если еще не установлена)
— Скачиваем архив с последней версий Core ESP32
— Распаковываем архив в папку:
C:/Users/[YOUR_USER_NAME]/Documents/Arduino/hardware/espressif/esp32

После это в Board Manadger появляется поддержка ESP32


Инструкции по установке в LINUX и MAC OS лежат на страничке проекта

Подключаем отладочную плату с ESP32 к USB и, если установлен драйвер на CP2102, то видим отладочный COM порт в системе. Если нет, ставим драйвер, как например это описано здесь

Запустив монитор порта на 115200 видим загрузку системы



Библиотек портировано еще очень мало

В каталогах example лежат примеры. Давайте займемся программированием.

Подключение к WiFi прошло на ура.

#include <WiFi.h>
#include <WiFiClient.h>

const char* ssid = "DIR-320";
const char* password = "-----------";

void setup(void)
{  
    Serial.begin(115200);


    // Connect to WiFi network
    WiFi.begin(ssid, password);
    Serial.println("");

    // Wait for connection
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }
    Serial.println("");
    Serial.print("Connected to ");
    Serial.println(ssid);
    Serial.print("IP address: ");
    Serial.println(WiFi.localIP());
 }

void loop(void){;}





С запуском веб-сервера из примера тоже проблем не составила. Правда удобных классов для HTTP-сервера в библиотеках нет, и весь HTTP-протокол реализуется вручную на лету. Но перенос библиотек ESP8266 дело времени. Да и самому можно заняться на досуге.
Давайте посмотрим как работают TOUCH сенсоры.
Подключаем пару проводков с площадками к выводам T1 и T2

После этого функции touchRead(T1) и touchRead(T2) возвращают значение больше 25, если прикоснуться к площадкам и 0-2 если не прикасаться.
Как работать с кнопками я подробно описывал

Программа работы с двумя сенсорными кнопками и подавлением дребезга

bool     button_state1 = false;
uint32_t ms_button1 = 0, ms_button2 = 0;
 
void setup()
{
   Serial.begin(115200);
   Serial.println("Test button ...");
}
 
void loop(){
   uint32_t ms = millis();
// Фиксируем нажатие кнопки
   if( touchRead(T1) > 20  && ( ms - ms_button1 ) > 100 ){
      ms_button1    = ms;
      Serial.println("Press key B1");
   }
   if( touchRead(T2) > 20  && ( ms - ms_button2 ) > 100 ){
      ms_button2    = ms;
      Serial.println("Press key B2");
   }

}




Кто то считает Arduino IDE огрызком нормальной системы разработки. Позвольте не согласится. Arduino IDE это довольно примитивный редактор + среда G++ для микроконтроллеров. А CORE ESP32 содержит версию SDK и никто не мешает пользоваться им напрямую.

Например, данная программа показывает, как обратится к встроенному температурному датчику и датчику холла

extern "C" {      
   uint8_t temprature_sens_read(); 
   uint32_t hall_sens_read();
}

void setup(void){  
    Serial.begin(115200);
}

void loop(void){
   uint8_t tf = temprature_sens_read();
   float   tc = ( tf - 32 )/1.8; 
   Serial.printf("Temp=%dC hal=%d\n",(int)tc,hall_sens_read());
   delay(1000);

}


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


По настоящему сильная сторона Arduino это гигантское количеством готовых библиотек. Нормально заработали библиотеки SSD1306 и GFX от Adafruit для OLED дисплея I2C
Код программы

#include <Wire.h>
#include "GFX.h"
#include "SSD1306.h" 


Adafruit_SSD1306 display(-1); 

void setup(void){  
    Serial.begin(115200);
    Serial.println("Start...");
    
    Wire.begin();
    
// Сканируем I2C шину
  for(int i = 1; i < 127; i++ )  {
      Wire.beginTransmission(i);
      if(  Wire.endTransmission() == 0 ){
          Serial.printf("Found I2C device 0x%x\n",i);
      }
   }
    
// Инициализация дисплея  
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  
  display.clearDisplay();

  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println("ESP32");
  display.setCursor(0,32);
  display.println("TEST");
  display.display();     
  delay(2000);

}

void loop(void){;}
}



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

/*
 *  This sketch sends a message to a TCP server
 *
 */

#include <WiFi.h>
#include <WiFiUdp.h>
#include <WiFiMulti.h>
#include "TM1637.h"

#define TM1637_CLK  22
#define TM1637_DIO  23


IPAddress timeServerIP; 
const char* ntpServerName = "time.nist.gov";
int TIMEZONE=5;
const int NTP_PACKET_SIZE = 48; 
byte packetBuffer[ NTP_PACKET_SIZE]; 
WiFiUDP udp;
TM1637 tm1637(TM1637_CLK,TM1637_DIO);
WiFiMulti WiFiMulti;

unsigned int  localPort = 2390;      // local port to listen for UDP packets
unsigned long ntp_time = 0;
long  t_correct        = 0;
unsigned long cur_ms   = 0;
unsigned long ms1      = 0;
unsigned long ms2      = 10000000UL;
unsigned long t_cur    = 0;
bool          points   = true;
unsigned int err_count = 0;
uint16_t     vdd       = 0;




void setup()
{
    Serial.begin(115200);
    delay(10);

// Инициализация дисплея
   tm1637.init();
// Установка яркости дисплея  
   tm1637.set(2);
   tm1637.point(false);
   tm1637.display(0,'-');
   tm1637.display(1,'-');
   tm1637.display(2,'-');
   tm1637.display(3,'-');
   delay(3000);

    // We start by connecting to a WiFi network
    WiFiMulti.addAP("DIR-320", "------------");

    Serial.println();
    Serial.println();
    Serial.print("Wait for WiFi... ");

    while(WiFiMulti.run() != WL_CONNECTED) {
        Serial.print(".");
        delay(500);
    }

    Serial.println("");
    Serial.println("WiFi connected");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());

    delay(500);
}


void loop()
{
   cur_ms       = millis();
   t_cur        = cur_ms/1000;
// Каждые 60 секунд считываем время в интернете 
   if( cur_ms < ms2 || (cur_ms - ms2) > 60000 ){
       err_count++;
// Делаем три  попытки синхронизации с интернетом
       if( GetNTP() ){
          ms2       = cur_ms;
          err_count = 0;
          t_correct = ntp_time - t_cur;
       }
   }
   
// Каждые 0.5 секунды выдаем время
   if( cur_ms < ms1 || (cur_ms - ms1) > 500 ){
       ms1 = cur_ms;
       ntp_time    = t_cur + t_correct;
       DisplayTime();
       points = !points;
   }

// Если нет соединения с интернетом, перезагружаемся
   if( err_count > 10 ){
       Serial.println("NTP connect false");
       Serial.println("Reset ESP32 ...");
//       ESP.reset();
    
   }
   delay(100);
}


/**
 * Выдача текущего времени на индикатор
 */
void DisplayTime(void){
   uint16_t m = ( ntp_time/60 )%60;
   uint16_t h = ( ntp_time/3600 )%24;
   Serial.print("Time: ");
   Serial.print(h);
   Serial.print(":");
   Serial.println(m);
   tm1637.point(points);
   tm1637.display(0,h/10);
   tm1637.display(1,h%10);
   tm1637.display(2,m/10);
   tm1637.display(3,m%10);
    
}


/**
 * Посылаем и парсим запрос к NTP серверу
 */
bool GetNTP(void) {
  WiFi.hostByName(ntpServerName, timeServerIP); 
  sendNTPpacket(timeServerIP); 
  delay(1000);
  
  int cb = udp.parsePacket();
  if (!cb) {
    Serial.println("No packet yet");
    return false;
  }
  else {
    Serial.print("packet received, length=");
    Serial.println(cb);
// Читаем пакет в буфер    
    udp.read(packetBuffer, NTP_PACKET_SIZE); 
// 4 байта начиная с 40-го сождержат таймстамп времени - число секунд 
// от 01.01.1900   
    unsigned long highWord = word(packetBuffer[40], packetBuffer[41]);
    unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]);
// Конвертируем два слова в переменную long
    unsigned long secsSince1900 = highWord << 16 | lowWord;
// Конвертируем в UNIX-таймстамп (число секунд от 01.01.1970
    const unsigned long seventyYears = 2208988800UL;
    unsigned long epoch = secsSince1900 - seventyYears;
// Делаем поправку на местную тайм-зону
    ntp_time = epoch + TIMEZONE*3600;    
    Serial.print("Unix time = ");
    Serial.println(ntp_time);
  }
  return true;
}

/**
 * Посылаем запрос NTP серверу на заданный адрес
 */
unsigned long sendNTPpacket(IPAddress& address)
{
  Serial.println("sending NTP packet...");
// Очистка буфера в 0
  memset(packetBuffer, 0, NTP_PACKET_SIZE);
// Формируем строку зыпроса NTP сервера
  packetBuffer[0] = 0b11100011;   // LI, Version, Mode
  packetBuffer[1] = 0;     // Stratum, or type of clock
  packetBuffer[2] = 6;     // Polling Interval
  packetBuffer[3] = 0xEC;  // Peer Clock Precision
  // 8 bytes of zero for Root Delay & Root Dispersion
  packetBuffer[12]  = 49;
  packetBuffer[13]  = 0x4E;
  packetBuffer[14]  = 49;
  packetBuffer[15]  = 52;
// Посылаем запрос на NTP сервер (123 порт)
  udp.beginPacket(address, 123); 
  udp.write(packetBuffer, NTP_PACKET_SIZE);
  udp.endPacket();
}


Подключаем индикатор к GPIO22 и GPIO23, ESP32 соединяется с интернетом и на дисплее получаем точное время для Перми

Жаль что в этом обзоре нельзя обьять все. За кадром остались и работа с Bluetooth и обновление прошивки по воздуху и работа с аналоговыми выходами и многое другое.
Но ведь это только начало!
Безусловно, ESP32 несмотря на свою не дозревшую программную часть, железка очень интересная. Да и по деньгам она уже не слишком кусается. Лично я буду ее пробовать использовать в различных проектах. А значит, будут и новые обзоры.
Всех с наступающим Праздником победы!

Планирую купить +127 Добавить в избранное +102 +210
+
avatar
+9
Все для программирование есть у производителя
Кроме закрытых библиотек, с огромным количеством недоделок.
несмотря на свою не дозревшую программную часть
Судя по 8266 — эта часть недозревающая в принципе.
Отличная была задумка, но кривая реализация поделок от ESP ставит жирный крест на изделиях этой конторы.
p.s. к обзору вопросов нет, а вот кислый осадок от общения с 8266-ми останется, наверное, навсегда.
+
avatar
  • sav13
  • 04 мая 2017, 16:23
+3
Китайцы довольно активно раскапывают «закрытые библиотеки»
wiki.jackslab.org/ESP32_ADC
+
avatar
+6
Китайцы довольно активно раскапывают
Кто их только «довольно активно» не раскапывает. Кроме производителя, зажавшего исходники, и не желающего править свои-же баги, подставляя очередной костыль в предыдущий набор костылей.
+
avatar
  • sav13
  • 04 мая 2017, 16:39
+1
Там же там FreeRTOS в отличие от ESP8266. Благо, ресурсы позволяют.
Так что надежда есть, что глюков меньше будет
+
avatar
  • Sanja
  • 04 мая 2017, 16:22
+2
можете показать то, как модуль «видит» ваш роутер?

с ESP8266 я столкнулся с тем, что модуль работает на скорости в аж целый 1 мегабит. Поскольку WiFi так устроен, что вся сеть работает на скорости самого тормозного участника, WiFi дома периодически вставал колом. Пришлось достать старую точку доступа и отвесить ESP в отдельную сеть на другом канале.
+
avatar
  • batal
  • 04 мая 2017, 16:28
+6
Дома постоянно к роутеру (микротик) подключены 3-4 ESP8266 (разных модификаций) растыканные по разным углам квартиры. Остальные устройства подключенные к этому роутеру никаких проблем со скростями не имеют.

Откуда вы взяли что
Поскольку WiFi так устроен, что вся сеть работает на скорости самого тормозного участника
+
avatar
  • Sanja
  • 04 мая 2017, 16:41
+2
Откуда вы взяли что
Протокол CSMA-CA так работает. ESP-шка посылает на своей черепашьей скорости jam-сигнал, все остальные девайсы в сети замолкают и ждут, когда она пропихнёт свой фрейм.
+
avatar
  • m0xf
  • 04 мая 2017, 16:48
+1
Это только если интенсивный обмен с медленным устройством вести.
+
avatar
  • sav13
  • 04 мая 2017, 16:33
0

Для ESP-шек вообще то отдельный старый роутер держу. ESP32 к основному своему подключил
+
avatar
  • Alber
  • 04 мая 2017, 16:35
+1
Может это всё таки некоторая несовместимость ПО конкретного роутера с ESP8266?
У моего роутера R2D никаких проблем с ESP8266 нет.
+
avatar
  • sir0ta
  • 04 мая 2017, 16:57
-2
С чего это вдруг со скоростью тормознутого? Общая скорость / количество клиентов. Вот так вот. Есть просто вероятность что либа либа старая, либо сам модуль глукнутый и ложит сеть.
+
avatar
  • Dimon_
  • 04 мая 2017, 17:40
+2
ложит
Вот прямо ложит?
+
avatar
0
комментарий скрыт

+
avatar
  • SEM
  • 05 мая 2017, 10:41
+2
А у нас тут не литературный кружок.
И что теперь, всем встать на четвереньки, грызть семки и слушать «Быдло-FM»?
+
avatar
  • sir0ta
  • 05 мая 2017, 11:24
-1
Ты серьезно? Еще раз — это местный диалект. И упрекать меня в использовании его все равно что упрекать самого себя в использовании вообще любого языка.
+
avatar
  • SEM
  • 05 мая 2017, 15:04
+3
В смысле у вас «на раёне» так все говорят? И стремиться к лучшему — вредно для здоровья, «пацаны не поймут»?
+
avatar
  • johnes
  • 04 мая 2017, 17:00
+1
Поддержу ответивших. Тоже имею постоянно подключеный ESP8266 к TP-Link wrt3600, который управляет системой отопления, и никаких тормозов в WiFi сети не имею.
+
avatar
  • Jager
  • 04 мая 2017, 18:11
+1
У меня с десяток устройств на ESP8266 и так же нет проблем со скоростью. Не смотря на это, имея обширную статистику на руках по переподключениям и аптайму я бы не стал доверять управление отоплением ESP.
+
avatar
+1
Xiaomi mi wifi 3 — есп8266 висят, скорости не падают.
+
avatar
  • darkds
  • 05 мая 2017, 00:04
+1
Никто не мешает взять старый вифи рутер (коих скапливается не особо нужных с b и g стандартами) и воткнуть эту сетку соседу на канал (не забывая про оверлап каналов — чтобы свой основной рутер не оттормаживать).
+
avatar
  • dansar
  • 05 мая 2017, 08:32
+1
Стало интересно:

+
avatar
  • dens17
  • 04 мая 2017, 16:26
+1
Жаль что в этом обзоре нельзя обьять все. За кадром остались и работа с Bluetooth и обновление прошивки по воздуху и работа с аналоговыми выходами и многое другое.
Но ведь это только начало!
А нельзя это на свой Яндекс-диск выложить и ссылкой поделиться? Захотелось, для общего развития, на вашем доступном языке, малость почитать за работу с модулем.
+
avatar
  • sav13
  • 04 мая 2017, 16:34
+13
У меня свой блог есть
Эту и другие статьи про ESP32 и кучу всего другого там можно найти
+
avatar
  • dens17
  • 04 мая 2017, 16:36
0
Спасибо, будем читать.
+
avatar
0
Лично я буду ее пробовать использовать в различных проектах.
А можете немного намекнуть что за проекты?
+
avatar
  • sav13
  • 04 мая 2017, 17:01
+2
Трудно пока сказать. ESP8266 в основном как устройства умного дома идут.
Так как ESP32 дороже, то однозначно в тех проектах где нужна крутая периферия и возможности.

Хотя, с другой стороны, есть OrangePi ZERO, которая на порядок круче в вопросе железа.
+
avatar
0
есть OrangePi ZERO, которая на порядок круче в вопросе железа
И опять же бока с WiFi :)
Raspberry Pi Zero W (c wifi) всё-же гораздо стабильней, для реальных задач :)
+
avatar
  • sav13
  • 04 мая 2017, 17:29
0
Ну я про нее и говорил
Сейчас уже Zero Plus с HDMI и Bluetooth вышли. Но там другая цена совсем. Хотя формфактор мне у них очень нравится
+
avatar
  • Zolg
  • 04 мая 2017, 20:21
+1
Все верно: rpi гораздо стабильный, гораздо гибче, гораздо производителей и гораздо прожорливей.
Для ряда применений последнее свойство важнее остальных.
+
avatar
0
Большое спасибо за обзор, давно ждал когда появится про esp32. Самому поковырять все некогда было, а тут такая затравочка ))
Лично я буду ее пробовать использовать в различных проектах. А значит, будут и новые обзоры.
Будем ждать новых проектов и конечно же обзоров!!!
+
avatar
  • l11t
  • 04 мая 2017, 16:54
0
а вкратце преимущества перед 8266 можете написать? лениво сопоставлять даташиты
+
avatar
  • sav13
  • 04 мая 2017, 16:59
+1
Примерно как кукурузник и реактивный самолет )))
— Процессор на порядок мощнее и памяти больше, что дает надежду на полноценный WiFi
— Очень богатая периферия
— Встроенная криптография (аппаратное ускорение)
— Блютуз на борту
— Заявлены очень хорошие режимы энергосбережения
— FreeRTOS
+
avatar
  • johnes
  • 04 мая 2017, 17:20
-2
эх… еще бы можно было бы это использовать в Arduino. А на использование всего этого вне Arduino к сожалению ставит крест отсутствие интерфейса отладки.
+
avatar
  • sav13
  • 04 мая 2017, 17:37
+1
Не понял на счет Ардуино. Написал же как в среде Ардуино писать.

Есть там и JTAG
hydrabus.com/2016/10/29/how-to-debug-esp32-with-jtag-openocd-gdb-1st-part-connect-the-hardware/
+
avatar
  • johnes
  • 08 мая 2017, 17:38
0
то что там есть JTAG — эт хорошо, я не знал, и это уже огромный прогресс.

А а про Ардуино я имел ввиду — что FreeRTOS и многоядерность там никак нельзя будет использовать, а это самые важные плюшки данного МК.
+
avatar
  • Alber
  • 04 мая 2017, 18:26
0
В виду выше сказанного + разницы в цене, ESP32 всё же не столько замена ESP8266, сколько контроллер для более серьезных задач.
Кстати, насколько удобна реализации параллельной обработки GPIO на ESP32/Arduino на сегодняшний день?
+
avatar
  • sav13
  • 04 мая 2017, 18:44
0
Не понял вопроса про параллельную обработку GPIO
У ESP32 есть очень развитая система прерывания. Есть каналы DMA. Куча таймеров, включая внешний RTC. И даже 2 ядра, на которых можно распаралеливать задачи. Правда инструменты я пока не раскопал.
А Arduino IDE я рассматриваю как универсальную среду, на которой можно писать хоть на ATTiny хоть на ESP32 или STM. Причем вполне можно писать на голом Си и ассемблере
+
avatar
  • Alber
  • 04 мая 2017, 20:11
0
Это я таким образом спросил про удобность, лаконичность и безкостыльность реализации многопоточности в рамках ESP32/Arduino IDE.
А то голый С во мне вызывает ужас, ну не переношу я его :)
+
avatar
  • Z2K
  • 04 мая 2017, 22:19
0
Как то Вы это не упомянули — Ethernet MAC interface with dedicated DMA and IEEE 1588 support. Как реально работать?
+
avatar
  • sav13
  • 05 мая 2017, 05:24
0
Я много чего не упомянул. И Ethernet и CAN
Работает это с внешними платами на TLK110 или LAN8720
Пример:
github.com/espressif/esp-idf/tree/master/examples/ethernet/ethernet
на форуме есть обсуждения
esp32.com/viewtopic.php?f=12&t=1178&start=10#p5733
+
avatar
0
Все бы ничего но 500 руб дороговато на сегодняшний день. Лишнюю про запас уже не купишь.
А так процессор конечно крут, по сравнению с 8266 и ардуиновскими.
+
avatar
0
Есть же due
+
avatar
  • sav13
  • 04 мая 2017, 17:38
+1
Сами модули стоят сейчас от $5 с бесплатной доставкой. Вполне комфортная цена при таких возможностях
+
avatar
+5
С удовольствием сходил бы на какие нибудь курсы по arduino. А основы вообще нужно в школе на уроках информатики давать.
+
avatar
+1
в ютубе полно роликов
+
avatar
+1
и 90% этих роликов дальше блиНка, подключения и заливки загрузчика дело не заходит. А все что заходит 50 на 50 с водой и неумением нормально пояснять)
+
avatar
0
что есть, то есть
сам еле нашел сайт с видео, где реально толково про c# рассказывают и главное мотивируют делать
я даже первый пакет купил, благо скидка была

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

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

зайди на flprog.ru, там есть софт для визуального программирования и куча видео уроков
реально можно за день разобраться самому
+
avatar
0
И меня возьмите! тоже хочу)
+
avatar
  • Sanja
  • 04 мая 2017, 22:51
0
на торрентах вагон книжек. Например,

books.google.ru/books?id=uNTOF-cj6F4C
books.google.ru/books?id=raHyKejOBF4C

даже если не очень владеете английским, достаточно разглядывать примеры — очень просветляет.
+
avatar
0
Всё это совсем не то. Начинать с нуля таким образом это просто мука, в то время, как преподавателю хватит недели чтобы задать инерцию достаточную для самообучения
+
avatar
+1
Если бы я слушал такие советы никогда бы ничему не научился.
Полно ютуб каналов, форумов, книжек. Покупаешь ардуино и вперед по тьюториалам.
+
avatar
  • sav13
  • 05 мая 2017, 05:29
0
Мне кажется, что начинать нужно не с Ардуино, а с основ программирования, изучения языков Си, Си++ и ассемблера и изучении архитектуры микроконтроллера.
Тогда все вопросы отпадут.
+
avatar
0
Может быть. И лучше это делать под руководством.
+
avatar
  • Stiva
  • 05 мая 2017, 11:32
+3
Начинать нужно всегда с задачи. Если есть задача, линия самообучения выстроится автоматически.
+
avatar
0
А можно вкратце рассказать про разницу в функционале между ESP32 и ESP8266 для тех, кто на практике ещё с ними не сталкивался и стоит перед выбором — с чего начать.
+
avatar
+2
Вот с ESP8266 и нужно начинать.
Благо примеров реализации море
+
avatar
  • sav13
  • 04 мая 2017, 17:54
+1
Несколько сообщений выше
Примерно как кукурузник и реактивный самолет )))
— Процессор на порядок мощнее и памяти больше, что дает надежду на полноценный WiFi
— Очень богатая периферия
— Встроенная криптография (аппаратное ускорение)
— Блютуз на борту
— Заявлены очень хорошие режимы энергосбережения
— FreeRTOS
Но начинать лучше с ESP8266 или еще лучше с Ардуино. Так как сообщество уже вполне «дозрело».
ESP32 пока только для «пытливых умов», раскапывающих разные мелочи
+
avatar
  • UWU
  • 04 мая 2017, 18:06
+1
Начать лучше с чистого Arduino. ESP32 и ESP8266 для начинающих не рекомендую. Эти модули больше подходят не «желязячникам», которым нужно чтобы «светодиод моргал», а профессиональным программерам. Для которых написать свою библиотеку — это лишь вопрос времени.
+
avatar
  • sav13
  • 04 мая 2017, 18:09
+1
Ну мне кажется не все так однозначно
Если роботов программировать, то да. А если творить умный дом с сетевыми протоколами, то однозначно ESP с MQTT или чем нибудь подобным. Можно с готовыми прошивками типа Блинка или Node MCU
+
avatar
  • UWU
  • 04 мая 2017, 18:16
0
Творить умный дом без серьёзного уровня программирования не получится. Нужно реально оценивать свои силы.
+
avatar
  • Chaser
  • 04 мая 2017, 19:06
+2
Так ведь то вопрос уровня автоматизации и размера жилища. Я на свою двушку благополучно клепаю подобие УД на ESP-шках. Вполне достаточно ESP-шек с прошивкой Wi-Fi IoT + в качестве мозга планирую Majordomo на стареньком нетбуке Asus. Знаний кодинга достаточно самых минимальных — реализовать через конструктор кода специфичный функционал, который нельзя реализовать штатными средствами прошивки. К сожалению реализация УД на более высоком уровне упирается в дороговизну исполнительных устройств. К примеру — хотел делать управляемые шторы, но увидев цены на электрокарнизы офигел, загрустил и откинул эту идею…
+
avatar
0
А я пытаюсь не спеша реализовать автоматические жалюзи. Зачем смотреть на готовые реализации, когда можно шаговый двигатель к ручному жалюзи приделать. Датчик освещенности на окно и возможно синхронизация с интернетом восходов закатов
+
avatar
0
Все это похвально. Но на практике выглядит очень убого, даже заводского исполнения. Движки очень большие, их вид все портит. Спрятать проблематично.
+
avatar
0
aliexpress.com/item/1pc-28BYJ-48-Lead-25cm-Stepper-Motor-DC-5V-4-Phase-Step-Motor-Reduction-Newest/32581650679.html,searchweb201602_4_10152_10065_10151_10068_436_10136_10137_10157_10060_10138_10155_10062_10156_10154_10056_10055_10054_10059_10099_10103_10102_10096_10169_10147_10052_10053_10142_10107_10050_10051_10084_10083_10119_10080_10082_10081_10110_10111_10112_10113_10114_10181_10037_10183_10182_10032_10078_10079_10077_10073_10070_10123_10120_10127_10125-10120,searchweb201603_1,ppcSwitch_2&btsid=71ab6595-9adc-41d1-af91-ddd2a7cf8dbd&algo_expid=4fca6eff-bc12-4aaa-91af-111e86566b7b-2&algo_pvid=4fca6eff-bc12-4aaa-91af-111e86566b7b
почему большие? у меня такой, крутит вполне и размер маленький. коробочка получится размера мыльницы и привод прямо на ручку-крутилку
+
avatar
  • Chaser
  • 04 мая 2017, 20:55
0
Это если у вас либо вертикальные, либо горизонтальные жалюзи. А если речь идёт о классических шторах, то здесь уже уместно готовое решение. Я хотел реализовать будильник через это дело, т.е. вместо звуковых сигналов — просто открываются шторы.
+
avatar
0
последний раз ставил вертикальные жалюзи людям и если вместо полосок жалюзи прикрепить простые шторы к крючкам система перемещения полосок жалюзи от края к центру и обратно вполне красиво будет открывать и закрывать простые шторы. а подключить к крутилке шаговый двигатель не сложная затея
+
avatar
0
фото дайте вашей реализации, обсудим
+
avatar
0
ну фото я и сам хотел бы увидеть :) нет его. видел на ютуб ролик с этим двигателем как он жалюзи крутит, даже писал автору чтобы я поправил. пока проект на стадии «собираю комплектуху». в жизни просто много чего ещё кроме поделок, но намерения у меня сделать
+
avatar
  • Chaser
  • 04 мая 2017, 22:26
0
Свежая поделка от Xiaomi — «умные шторы». tehnot.com/xiaomi-aqara-smart-curtain-umnye-shtory-za-145/
+
avatar
-1
Думал что в обзоре будет написано что же заставило автора купить есп32. Нет не написано, я серьёзно не вижу куда реализовать данную мощность, легко мог бы купить, но 8266 пока позволяет делать всё что задумались.
+
avatar
  • sav13
  • 04 мая 2017, 18:07
+1
Заставило любопытство ))) Люблю в новых железках поковыряться
Но сферу применению на первый взгляд вижу такую:
1, Там где нужна нормальная скорость WiFi (например потоковое аудио)
2. Там где видится нормальный встроенный ВЕБ-сервер. ESP8266 уж слишком тормозной для этого
3. Там где нужна богатая периферия. У ESP она просто никакая даже по сравнению с AVR-ками
4. Там где нужна нормальная защита (поддержка криптопротоколов)
+
avatar
0
Я вас отлично понимаю, у самого руки чешуться, но тут есть большое НО. А как же распберри? Он не решает по лёгкому всех вопросов что встали? Если не смотреть особенно на цену, на распберри можно уже сегодня всё это сделать
+
avatar
  • UWU
  • 04 мая 2017, 18:24
+1
Распберри от батареек не запитаешь. А эту, легко. А по возможностям, качественный рывок, по сравнению с Arduino.

Есть много разных идей, которые Arduino не тянет, а малинка слишком большая и слишком много жрёт.
+
avatar
-1
Почитайте что автор предложил в качестве будущих реализаций для есп32, только полный неадекватно будет крутить такие проекты на батарейках. 8266 вполне засыпает и просыпается, опробовано.
Я ардуино сейчас вообще не рассматриваю
+
avatar
  • UWU
  • 04 мая 2017, 18:36
+1
Есть множество проектов, о которых автор не сказал.
+
avatar
0
Не надо много, один проект напишите где 8266 не хватит, распберри не смогла, а есп32 как раз. И понятно что это только в теории, так как работающих проектов с загрузкой по хорошему 2 ядер я ещё не видел
+
avatar
  • UWU
  • 04 мая 2017, 18:59
+1
Диктофон в MP3 с передачей файлов через GSM.

А два ядра загрузить грамотно, даже на PC задача далеко не тривиальная.
+
avatar
  • sav13
  • 04 мая 2017, 18:38
+2
LINUX компьютеры, как ни крути — не системы реального времени. Хотя многие задачи на них решаются
Совсем другой сегмент.
+
avatar
-1
Возможно я мелко мыслю, но единственное, что приходит на ум это производительный VPN сервер, если у него с АЕS всё хорошо, может NAS получится, но как он с дисками общаться будет?
+
avatar
  • Z2K
  • 05 мая 2017, 06:44
0
это производительный VPN
— с его аппаратными секюрити впечатление что можно реализовать. Хорошая задача, но больно уж трудоемкая.
+
avatar
  • Z2K
  • 05 мая 2017, 06:46
+1
для наса сейчас нужен аппаратный гигабит в соке
+
avatar
0
высокопроизводительному vpn гигабит тоже не будет лишним. как там есп32 умеет максимум по вайфай прокачать интересно?
+
avatar
  • Alber
  • 04 мая 2017, 18:31
0
Достаточно ли его мощи для SqueezeBox на ESP32->I2C->DAC? :)
+
avatar
  • sav13
  • 04 мая 2017, 18:40
0
Не знаю.
Но по крайней мере ESP32->I2S с декодированием MP3 потока в нормальном качестве проект видел
+
avatar
+2
для SqueezeBox
Для сквизбокса отлично работает проект piCore на малинке.
В последнем релизе подтянули и встроенные wifi модули на RPi3 и zero W.
Вот последняя (W) с любым нужным DAC-ом перекрывает любой запрос для сквиз-плейера.
+
avatar
+1
Пермь? Ты реальный пацан ))))
+
avatar
  • UWU
  • 04 мая 2017, 18:09
0
Интересно, а возможность WiFi работать в режиме точки доступа предусмотрена или нет.
+
avatar
  • sav13
  • 04 мая 2017, 18:10
0
Предусмотрена, как и в ESP8266. А так же и совместный режи — соединение + точка доступа.
Но не проверял пока
+
avatar
  • Xizel
  • 04 мая 2017, 19:03
-1
А Я скажу свое мнение. Ардуины хватает на свои проекты. А что выше — лучше взять уже готовым вариантом.
+
avatar
  • sav13
  • 04 мая 2017, 19:06
+3
Ну если мигать светодиодом, то и Ардуины много )))
+
avatar
  • Xizel
  • 04 мая 2017, 19:15
0
Это если много времени… Что вы еще доверите кроме переключение реле- Ардуино?
+
avatar
  • sav13
  • 04 мая 2017, 19:43
+1
Ардуине ничего,
AVR Atmega328 любое управление )))
Arduino это же плата для отладки и разработки
+
avatar
+1
Какова частота дискретизации у АЦП этого модуля?
Каков допустимый диапазон напряжений (Umin. — Umax.) на входе АЦП?
+
avatar
  • UWU
  • 04 мая 2017, 19:15
+1
В даташите про это почему-то ни слова
+
avatar
  • sav13
  • 04 мая 2017, 19:36
0
Зато здесь много
espressif.com/sites/default/files/documentation/esp32_technical_reference_manual_en.pdf
Еще и усилитель ADC есть
+
avatar
0
Может где то пропустил, но там тоже не нашёл про частоту дискретизации АЦП…
+
avatar
  • UWU
  • 04 мая 2017, 22:17
+1
В документе нет ни слова о частоте. А вообще народ говорит про 6 кГц, по умолчанию. Но это как-то ограничено прошивкой. Железячное ограничение где-то на уровне 100 кГц. Но это не официальная инфа, а слухи с форумов.
+
avatar
+8
читал тут форум esp8266.ru. люди умеющие програмировать плачут на взрыд от ESPRESSIF-го SDK и порядком устали от его глючности. все советуют переходть на RTL8710. SDK намного грамотнее, RTOS из коробки даже под arduino и меньше памяти жрет под свои нужды. там кстати в примерах есть web radio работающее без обвесов (мощи и правильного SDK хватает обрабатывать mp3 внутри RTL8710). ESP32 и ESP8266 нервно курят в сторонке.

вот вся схема web radio:



а вот код

#include <WiFi.h>
#include "RTL00MP3.h"
 
char ssid[] = "yourNetwork"; //  your network SSID (name)
char pass[] = "password";    // your network password (use for WPA, or use as key for WEP)
 
void setup() {
  WiFi.begin(ssid, pass);
}
 
void loop() {
  if(WiFi.status() == WL_CONNECTED) {
    if(RTLmp3.status() == 0) {
      Serial.println("\nCONNECTED");
      RTLmp3.begin("icecast.omroep.nl/3fm-sb-mp3", 80);
    }
  }
  else  RTLmp3.end();
  delay(50);
}
+
avatar
-1
Где купить?
+
avatar
+2
В хозмаге рядом с домом. Вы что, серьёзно?! Поиск занимает 2-3 секунды в новом окне.
+
avatar
0
Да, очень неплохо, но цена «в обвязке» от US $8 / шт. Хотя цена обозреваемой платы ровно такая же…
+
avatar
0
Да где то так. $3..4 за чип или около $8..10 за тладочную плату Ameba. Но вы получаете нормальный SDK. Пол года назад только за чип хотели $8. Цены падают.

я взял такую. Есть еще такая, но мне лишние свистоперделки типа RBG светодиода не надо. Или голый чип, под готовый проект.
+
avatar
  • sav13
  • 05 мая 2017, 16:02
0
RTL8710 не имеет ADC/DAC, Bluetooth
Тут скорее RTД8711AM нужен, но там и цена другая
+
avatar
0
Ну в esp всего один adc и он далек от идеала. А dac нет.
+
avatar
0
могу псоветовать хорошие dac/adc — MCP4725/ADS1115

под MCP4725 уже библиотеку написал. щас тестирую с энкодером. хочу линейный лабораторник сдетать с цифровым управлением.
+
avatar
-1
За ету цену pizero лучше в 100 раз
+
avatar
+2
Её за 5 ни где не купить. Похоже это был рекламный трюк. Выпустили ограниченную версию себе в убыток, чтоб волну поднять и интерес подогреть.

Плюс в линуксе под пи своих заморочки хватает. Например частыми записями на флешку.
+
avatar
0
мне на почту несколько раз приходило напоминание о возможности купить, но в РФ не шлют совсем (сказали, может позже)
+
avatar
  • sav13
  • 04 мая 2017, 20:59
+1
Лучше для чего?

Может у нее 5мкА в режиме пробуждения по таймеру есть?
Или 10мкА в режиме ожидания прерывания?
А сколько у нее аппаратных PWM и аналоговых входов/выходов?
+
avatar
+1
Поддерживаю предыдущего комментатора. По факту пизеро это вообще из другой оперы. Вы платите сумасшедшим энергопотреблением (по меркам микроконтроллеров) за возможность запускать любой софт, написанный под линукс.
Есть конечно проекты, на которых с помощью пизеро управляют релюшкой или светодиодиком, но это из пушки по воробъям.
+
avatar
+2
Спасибо за обзор! Пару месяцев назад купил такую же, руки не дошли попробовать.
Второе ядро очень помогает, когда девайсу нужно отправить\получить что-то по вайфай. Сетевой код работает на одном ядре, код пользователя на втором. Получается, затыки сети не блокируют работу пользовательской программы.
Иногда, это важно.
+
avatar
  • sav13
  • 04 мая 2017, 21:08
0
А вы знаете, как запустить что-то на втором ядре?
+
avatar
0
Сам не пробовал, вот тут есть примеры: www.esp32.com/viewtopic.php?t=764
+
avatar
0
Мне наверно неправильный esp8266 китайцы продали. Работает месяцами, поднят сервер, опрос датчиков, синхронизация времени, отправка почты. На скорость точки и клиентов не влияет (выше писали). Хочу в небольшую серию пустить. Что у меня не так? Чего модуль так ругают?
+
avatar
0
вы наверное покупали готовый модуль? У меня всякое было — не припаяли нулевое сопротивление в нужном месте, пожлобились на конденсатор и т.п. Пару часов такая фигня забирает, чтобы разобраться. Вам в этот раз повезло с этим модулем. Не факт, что китайся в следущий раз пришлет что-то толковое.
+
avatar
  • sav13
  • 05 мая 2017, 05:48
+4
Сами модули обычно все рабочие приезжают. Из сотни модулей откровенного брака не встречал. Все глюки в программировании )))
+
avatar
0
Примеры программ в тексте — рабочие или адаптированные для публикации в статье?
Например, в опубликованном виде «Программа работы с двумя сенсорными кнопками и подавлением дребезга» подавления дребезга не делает: при первом же прочитанном после паузы в нажатиях высоком значении на проверяемом выводе будет заход внутрь условного оператора. И при удержании нажатой кнопки сообщение о нажатии будет отсылаться в serial каждые 100 мс. Так, по крайней мере, следует из текста программы. И если работает иначе, то это какая-то фича обозреваемого устройства или средств его программирования, про которую хотелось бы знать побольше.
Выводы T1 и T2, насколько можно судить по фото, это GPIO0, GPIO2 (они же Touch1, Touch2). Никаких процедур, «подготавливающих» выводы к работе с тач-кнопками делать не надо?
На схеме выводов есть пометки «pu» и «pd» — это «poll-up» и «poll-down»?
Дополнительная память в 4-16 Мб — это в мегабитах? 4 МБ — предельный размер памяти? В маркировке модулей как-то отражается количество памяти?
Есть опыт конструирования автономных устройств на ESP32? Есть смысл переходить с ESP8266, если по производительности и ресурсам практически хватает ESP8266, а хочется увеличить время автономной работы (от аккумулятора типа 18650, например) и снизить вероятность притормаживания в нагруженные моменты?
Размер esp32-кода какой-нибудь программы сильно отличается от размера ESP8266-кода?
… Дёргать каждую минуту NTP-сервер — неправильно как-то…
+
avatar
  • sav13
  • 05 мая 2017, 05:47
+1
Примеры все прогонялись реально. По кнопкам согласен, код сильно упрощен для статьи.
А вот опыта практического использования у автора нету. Пока. Вот запихну железку в реальный проект и посмотрю, как она себя поведет. Но это уже скорее всего выйдет за тему данного сайта )))

Код программы очень сильно зависит от того какие библиотеки подтаскиваются компилятором
Например, скетч с кнопками:
Скетч использует 106170 байт (10%) памяти устройства. Всего доступно 1044464 байт.
Глобальные переменные используют 9544 байт (3%) динамической памяти, оставляя 285368 байт для локальных переменных. Максимум: 294912 байт.


А это скетч с WiFi:
Скетч использует 401935 байт (38%) памяти устройства. Всего доступно 1044464 байт.
Глобальные переменные используют 32524 байт (11%) динамической памяти, оставляя 262388 байт для локальных переменных. Максимум: 294912 байт.


Похоже, что библиотеки из SDK очень прожорливы, но это компенсируется большой памятью устройства
+
avatar
  • Z2K
  • 05 мая 2017, 06:51
+2
Да, как-то совсем не оптимально. По кнопкам вообще какая-та жуть. Этож-как надо изловчиться что б столько наваять на таком. :))
Зато сенсорная — из «каропки».
Мы здесь напрограммировали, а вы себе новый ПК купите, и памяти побольше, побольше.
+
avatar
0
в их SDK стратегии держать всё в статических буферах. На них вся память уходит, если предназначенные для этих буферов процедуры практически не используются (к примеру пару раз и по очереди, но у каждой в памяти выделен свой буфер и памяти каюк)… А переписывать всю SDK никто не станет. В ESP всё так-же начиналось — через год они практически во всем перешли на использование динамически выделяемой памяти (heap), но оставались статические буфера у WiFi. Пока heap не стал 32 кило, что уже никуда не годиться, они почистили статические буфера. Ныне на более 50 кило heap в ESP8266 рассчитывать нет возможности, а этот остаток = минимум хоть для какой-то работы LwIP с TCP на пару соединений, без SSL. У RTL8710 в стандартном SDK 3.5 два heap — один занимает всю TCM память (64 кило, делит место с буферами LwIP, остальное под стек основных задач распределяет RTOS) и так названный пользовательский на 60 килобайт + ещё десяток с чем-то замещающий память загрузчика после старта… Т.е. только heap у младшего RTL превышает практически всю память ESP8266.
+
avatar
0
авторство указывайте
+
avatar
0
вот вам еще немножко насыплю

Изначально микросхема разрабатывалась как WiFi MAC с интерфейсом SDIO/GSPI. Есть 96К RAM данных и 64К RAM инструкций. Также есть 64К ROM в котором прошита устаревшая версия WiFi стека (называют v5). Стек обновили (до v6), появился 802.11n, расширили список режимов шифрования и ресурсов памяти практически не осталось.

Еще у чипа есть возможность исполняться из памяти SPI, точнее часть IRAM можно «отмапить» и она начинает работать как кеш инструкций, считываемых по 4-битному SPI из внешней микросхемки флеш. Тут-то кетайцам (Espressif) и поперло! Они решили сделать такой себе SDK — WiFi стек упрятывают в объектные библиотеки, пишут свою обертку и разрешают писать сторонние прошивки.

В-общем, сказать что оно глючное — значит вообще ничего не сказать. Ресурсов по свободной памяти с каждым новым SDK (с исправлением ошибок) все меньше и меньше. Описание — кетайское (хотя и на английском) — это все что Вам о нем нужно знать.

Но, небольшую поделку с WiFi (типа выключателя или беспроводного датчика) можно сделать действительно быстро. На сайте энтузиастов про ESP8266 ходит заезженная шутка — что ни делай с ESP8266 — получается метеостанция :)

Я использую ESP8266 со своим стеком, с большим трудом вычистил из него кетайский мусор (оставил только WiFi v6 стек и заглушки, и то икается — он без кетайской кооперативной ОС не работает) и сделал из него дешевый MAC по UART.

У ESP8266 нет внутренней флешпамяти. На модуле стоит собственно ESP8266 (он же перемаркированный ESP8089, возможно только ROM другой), и SPI-флешка от Winbond или аналог. Исполнение кода идет из флешки, то есть оно медленно и печально читается по SPI (40 или 80МГц на 4 бита — макс 40МБ/сек, для 160МГц проца с 24-битным словом инструкции — это пыль), ну правда может кешироваться в части IRAM — там аппаратный механизм есть. Пока можно установить размер кеша 16 или 32К. И к этой кешированной памяти, если нужен не только код (те которые const data) можно обращаться только 32-битными словами, а куча CRT-функций такого не понимает, поэтому народ там извращается с обработчиками исключений (эмулирует побайтовый и 16-битный доступ). В-общем, аппаратура своеобразная весьма и используется не по задуманному при разработке сценарию.
+
avatar
  • sav13
  • 05 мая 2017, 19:45
+1
Это все таки про ESP8266 статья.
Там совсем другое железа и другой софт
+
avatar
0
Я не думаю что с выходом нового продукта у ESPRESSIF поменялась корпоративная этика и они перестали гнать лажу. Хотя посмотрим.
+
avatar
0
К то вы же сами писали
Похоже, что библиотеки из SDK очень прожорливы, но это компенсируется большой памятью устройства
Так что похоже опять лажу гонят
+
avatar
  • sav13
  • 06 мая 2017, 06:21
+1
Ну на счет прожорливости трудно сказать.
Если там в ядре лежит полноценный TCP стек, шифрование и еще куча всего, то это совсем не немного.
Тут выше ESP с фруктово-ягодным семейством сравниваю, вот там без 1Гб памяти делать нечего совсем )))
Поживем увидим.
+
avatar
-1
«Вкусность» любой железки определяется наличием софта к ней, имхо. Применительно к дурине — наличием готовых библиотек. Без этого там хоть гиг рам и 100 ядер — если софт есть только «диодиком поморгать», она так и будет только моргать.
Успех 8266 — цена + куча софта
есп32 — куча дорогущих вариаций модуля на старте продаж + задержки с поставкой + наличие более дешевых конкурентов (ака ртл)
+
avatar
  • ringo
  • 12 мая 2017, 22:14
0
Как этот чип в сравнении с STM32?
+
avatar
0
У стм нету вифи. Стм корректнее сравнивать с ртл, они больше похожи — ядро АРМ кортекс
+
avatar
  • jik
  • 22 июля 2017, 19:10
0
Здесь ошибка:
2 x IS1

Должно быть:
2 x I2S

Пробовали использовать I2S?