Освой Arduino играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

ESP32: Базовые примеры

Мигаем светодиодом
RGB-светодиод
Измеряем температуру чипа
Датчик Холла для обнаружения магнита
Узнать настройки Wi-Fi модуля
Базовая информация о модуле

Если использовать стандартный скетч из File | Examples | 01.Basics | Blink, то получим ошибку. Причина в следующем - у ESP32 нет константы LED_BUILTIN, которая указывает на встроенный светодиод (что достаточно странно). Поэтому следует явно указать вывод платы, как это было в старых примерах. Кроме того, встроенный светодиод находится не на выводе 13, а на выводе 2. С учётом этих особенностей скетч для мигания встроенным светодиодом будет следующим.


// Мигаем встроенным светодиодом на ESP32
const int LED = 2;

void setup() {
  pinMode(LED, OUTPUT);
}

void loop() {
  delay(1000);
  digitalWrite(LED, HIGH);
  delay(1000);
  digitalWrite(LED, LOW);
}

RGB-светодиод

У ESP32 нет функции analogWrite(), поэтому стандартный способ не подходит. Взамен можно использовать другие функции, о которых в другой статье. А пока простой пример для включения основных цветов без промежуточных вариантов для модуля RGB-светодиода. Используем выводы 12, 13, 14 и GND.


void setup()
{
	pinMode(12, OUTPUT);
	pinMode(13, OUTPUT);
	pinMode(14, OUTPUT);

}

void loop()
{
	digitalWrite(12, HIGH);
	digitalWrite(13, HIGH);
	digitalWrite(14, HIGH);
	delay(2000);

	digitalWrite(12, LOW);
	digitalWrite(13, LOW);
	digitalWrite(14, LOW);
	delay(2000);

	digitalWrite(12, LOW);
	digitalWrite(13, HIGH);
	digitalWrite(14, LOW);
	delay(2000);

	digitalWrite(12, LOW);
	digitalWrite(13, LOW);
	digitalWrite(14, HIGH);
	delay(2000);
}

Другой пример работы с RGB-модулем

Измеряем температуру чипа

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

При тестировании у меня всегда выводилось 53.33 градуса. Даже не знаю, можно ли ему вообще доверять.


#ifdef __cplusplus
extern "C" {
#endif

uint8_t temprature_sens_read();

#ifdef __cplusplus
}
#endif

uint8_t temprature_sens_read();

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

void loop() {
  Serial.print("Temperature: ");

  // Convert raw temperature in F to Celsius degrees
  Serial.print((temprature_sens_read() - 32) / 1.8);
  Serial.println(" C");
  delay(1000);
}

Датчик Холла для обнаружения магнита

У платы есть встроенный датчик Холла, который умеет обнаруживать магниты. Напишем скетч, который при обнаружении магнита будет включать светодиод. Также в Serial Monitor выводятся текущие показания.


const int LED = 2;

void setup() {
  Serial.begin(115200);
  pinMode(LED, OUTPUT);
}

void loop() {
  int sensor = hallRead();  // считываем показания датчика Холла
  Serial.print("Sensor Reading:");
  Serial.println(sensor);

  digitalWrite(LED, (sensor < 0) ? HIGH : LOW); // включаем светодиод при обнаружении магнита
  delay(500);
}

Узнать настройки Wi-Fi модуля

Для скетча нам не понадобится вводить пароль от Wi-Fi, достаточно просто включить сам Wi-Fi на плате и узнать его Mac-адрес, запустить диагностику, узнать локальный адрес.


/*
   ESP-32 Example,
   start WiFi (without ssid and password)
   and print the MAC address to Serial.
*/

#include <WiFi.h>

byte mac[6];

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

  Serial.print("\nRun diagnostic...\n");
  WiFi.printDiag(Serial);

  Serial.println();
  Serial.print("Program Start...");

  WiFi.enableSTA(true);
  WiFi.begin();
  Serial.println("WiFi began");
  WiFi.macAddress(mac);

  Serial.print("MAC: ");
  Serial.print(mac[0], HEX);
  Serial.print(":");
  Serial.print(mac[1], HEX);
  Serial.print(":");
  Serial.print(mac[2], HEX);
  Serial.print(":");
  Serial.print(mac[3], HEX);
  Serial.print(":");
  Serial.print(mac[4], HEX);
  Serial.print(":");
  Serial.println(mac[5], HEX);

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

void loop() {

}

Базовая информация о модуле

Версия SDK, размер флеш-памяти.


void setup() {
  Serial.begin(115200);
  Serial.println(ESP.getSdkVersion());
  Serial.printf("Flash chip frequency:\t\t\t\t%d (Hz)\n", ESP.getFlashChipSpeed());
  Serial.printf("Flash chip size:\t\t\t\t%d (bytes)\n", ESP.getFlashChipSize());
  Serial.printf("Free heap size:\t\t\t\t\t%d (bytes)\n", ESP.getFreeHeap());
  
}

void loop() {

}
Реклама