#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){;}
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");
}
}
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);
}
#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){;}
}
/*
* 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();
}
+16 |
3499
97
|
Судя по 8266 — эта часть недозревающая в принципе.
Отличная была задумка, но кривая реализация поделок от ESP ставит жирный крест на изделиях этой конторы.
p.s. к обзору вопросов нет, а вот кислый осадок от общения с 8266-ми останется, наверное, навсегда.
wiki.jackslab.org/ESP32_ADC
Так что надежда есть, что глюков меньше будет
с ESP8266 я столкнулся с тем, что модуль работает на скорости в аж целый 1 мегабит. Поскольку WiFi так устроен, что вся сеть работает на скорости самого тормозного участника, WiFi дома периодически вставал колом. Пришлось достать старую точку доступа и отвесить ESP в отдельную сеть на другом канале.
Откуда вы взяли что
Для ESP-шек вообще то отдельный старый роутер держу. ESP32 к основному своему подключил
У моего роутера R2D никаких проблем с ESP8266 нет.
Эту и другие статьи про ESP32 и кучу всего другого там можно найти
Так как ESP32 дороже, то однозначно в тех проектах где нужна крутая периферия и возможности.
Хотя, с другой стороны, есть OrangePi ZERO, которая на порядок круче в вопросе железа.
Raspberry Pi Zero W (c wifi) всё-же гораздо стабильней, для реальных задач :)
Сейчас уже Zero Plus с HDMI и Bluetooth вышли. Но там другая цена совсем. Хотя формфактор мне у них очень нравится
Для ряда применений последнее свойство важнее остальных.
Будем ждать новых проектов и конечно же обзоров!!!
— Процессор на порядок мощнее и памяти больше, что дает надежду на полноценный WiFi
— Очень богатая периферия
— Встроенная криптография (аппаратное ускорение)
— Блютуз на борту
— Заявлены очень хорошие режимы энергосбережения
— FreeRTOS
Есть там и JTAG
hydrabus.com/2016/10/29/how-to-debug-esp32-with-jtag-openocd-gdb-1st-part-connect-the-hardware/
А а про Ардуино я имел ввиду — что FreeRTOS и многоядерность там никак нельзя будет использовать, а это самые важные плюшки данного МК.
Кстати, насколько удобна реализации параллельной обработки GPIO на ESP32/Arduino на сегодняшний день?
У ESP32 есть очень развитая система прерывания. Есть каналы DMA. Куча таймеров, включая внешний RTC. И даже 2 ядра, на которых можно распаралеливать задачи. Правда инструменты я пока не раскопал.
А Arduino IDE я рассматриваю как универсальную среду, на которой можно писать хоть на ATTiny хоть на ESP32 или STM. Причем вполне можно писать на голом Си и ассемблере
А то голый С во мне вызывает ужас, ну не переношу я его :)
Работает это с внешними платами на TLK110 или LAN8720
Пример:
github.com/espressif/esp-idf/tree/master/examples/ethernet/ethernet
на форуме есть обсуждения
esp32.com/viewtopic.php?f=12&t=1178&start=10#p5733
А так процессор конечно крут, по сравнению с 8266 и ардуиновскими.
сам еле нашел сайт с видео, где реально толково про c# рассказывают и главное мотивируют делать
я даже первый пакет купил, благо скидка была
с другой стороны, когда ты новичек в чем-то, то тебе кажется, что все сложно и непонятно
я тоже проходил первые уроки платного курса и мне как бы было понятно, но некоторые вещи были непонятны и я там писал отчеты
а люди говорили, что со временем все станет понятно и вот я дошел до какого-то ролика и действительно, все стало становится понятно само собой
т.е. нужна практика и накопление критической массы не просто теоретических знаний, а реальной практики и тогда в один момент срабатывает тумблер в голове и тебя озаряет
зайди на flprog.ru, там есть софт для визуального программирования и куча видео уроков
реально можно за день разобраться самому
www.youtube.com/channel/UChQZ64F7jbFGPIK5-BFqV2w/videos
books.google.ru/books?id=uNTOF-cj6F4C
books.google.ru/books?id=raHyKejOBF4C
даже если не очень владеете английским, достаточно разглядывать примеры — очень просветляет.
Полно ютуб каналов, форумов, книжек. Покупаешь ардуино и вперед по тьюториалам.
Тогда все вопросы отпадут.
Благо примеров реализации море
Но начинать лучше с ESP8266 или еще лучше с Ардуино. Так как сообщество уже вполне «дозрело».
ESP32 пока только для «пытливых умов», раскапывающих разные мелочи
Если роботов программировать, то да. А если творить умный дом с сетевыми протоколами, то однозначно ESP с MQTT или чем нибудь подобным. Можно с готовыми прошивками типа Блинка или Node MCU
почему большие? у меня такой, крутит вполне и размер маленький. коробочка получится размера мыльницы и привод прямо на ручку-крутилку
Но сферу применению на первый взгляд вижу такую:
1, Там где нужна нормальная скорость WiFi (например потоковое аудио)
2. Там где видится нормальный встроенный ВЕБ-сервер. ESP8266 уж слишком тормозной для этого
3. Там где нужна богатая периферия. У ESP она просто никакая даже по сравнению с AVR-ками
4. Там где нужна нормальная защита (поддержка криптопротоколов)
Есть много разных идей, которые Arduino не тянет, а малинка слишком большая и слишком много жрёт.
Я ардуино сейчас вообще не рассматриваю
А два ядра загрузить грамотно, даже на PC задача далеко не тривиальная.
Совсем другой сегмент.
Но по крайней мере ESP32->I2S с декодированием MP3 потока в нормальном качестве проект видел
В последнем релизе подтянули и встроенные wifi модули на RPi3 и zero W.
Вот последняя (W) с любым нужным DAC-ом перекрывает любой запрос для сквиз-плейера.
Но не проверял пока
AVR Atmega328 любое управление )))
Arduino это же плата для отладки и разработки
Каков допустимый диапазон напряжений (Umin. — Umax.) на входе АЦП?
espressif.com/sites/default/files/documentation/esp32_technical_reference_manual_en.pdf
Еще и усилитель ADC есть
вот вся схема web radio:
а вот код
я взял такую. Есть еще такая, но мне лишние свистоперделки типа RBG светодиода не надо. Или голый чип, под готовый проект.
Тут скорее RTД8711AM нужен, но там и цена другая
под MCP4725 уже библиотеку написал. щас тестирую с энкодером. хочу линейный лабораторник сдетать с цифровым управлением.
Плюс в линуксе под пи своих заморочки хватает. Например частыми записями на флешку.
Может у нее 5мкА в режиме пробуждения по таймеру есть?
Или 10мкА в режиме ожидания прерывания?
А сколько у нее аппаратных PWM и аналоговых входов/выходов?
Есть конечно проекты, на которых с помощью пизеро управляют релюшкой или светодиодиком, но это из пушки по воробъям.
Второе ядро очень помогает, когда девайсу нужно отправить\получить что-то по вайфай. Сетевой код работает на одном ядре, код пользователя на втором. Получается, затыки сети не блокируют работу пользовательской программы.
Иногда, это важно.
Например, в опубликованном виде «Программа работы с двумя сенсорными кнопками и подавлением дребезга» подавления дребезга не делает: при первом же прочитанном после паузы в нажатиях высоком значении на проверяемом выводе будет заход внутрь условного оператора. И при удержании нажатой кнопки сообщение о нажатии будет отсылаться в serial каждые 100 мс. Так, по крайней мере, следует из текста программы. И если работает иначе, то это какая-то фича обозреваемого устройства или средств его программирования, про которую хотелось бы знать побольше.
Выводы T1 и T2, насколько можно судить по фото, это GPIO0, GPIO2 (они же Touch1, Touch2). Никаких процедур, «подготавливающих» выводы к работе с тач-кнопками делать не надо?
На схеме выводов есть пометки «pu» и «pd» — это «poll-up» и «poll-down»?
Дополнительная память в 4-16 Мб — это в мегабитах? 4 МБ — предельный размер памяти? В маркировке модулей как-то отражается количество памяти?
Есть опыт конструирования автономных устройств на ESP32? Есть смысл переходить с ESP8266, если по производительности и ресурсам практически хватает ESP8266, а хочется увеличить время автономной работы (от аккумулятора типа 18650, например) и снизить вероятность притормаживания в нагруженные моменты?
Размер esp32-кода какой-нибудь программы сильно отличается от размера ESP8266-кода?
… Дёргать каждую минуту NTP-сервер — неправильно как-то…
А вот опыта практического использования у автора нету. Пока. Вот запихну железку в реальный проект и посмотрю, как она себя поведет. Но это уже скорее всего выйдет за тему данного сайта )))
Код программы очень сильно зависит от того какие библиотеки подтаскиваются компилятором
Например, скетч с кнопками:
А это скетч с WiFi:
Похоже, что библиотеки из SDK очень прожорливы, но это компенсируется большой памятью устройства
Зато сенсорная — из «каропки».
Мы здесь напрограммировали, а вы себе новый ПК купите, и памяти побольше, побольше.
Там совсем другое железа и другой софт
Так что похоже опять лажу гонят
Если там в ядре лежит полноценный TCP стек, шифрование и еще куча всего, то это совсем не немного.
Тут выше ESP с фруктово-ягодным семейством сравниваю, вот там без 1Гб памяти делать нечего совсем )))
Поживем увидим.
Успех 8266 — цена + куча софта
есп32 — куча дорогущих вариаций модуля на старте продаж + задержки с поставкой + наличие более дешевых конкурентов (ака ртл)
Должно быть:
Пробовали использовать I2S?