Как было отмечено в предыдущей статье, одним из методов работы с ESP8266 является использование «самодельной» прошивки.
Наиболее «ленивым» способом реализовать этот метод можно используя «готовые dll-ки» для Arduino IDE. Такое решение позволяет использовать стандартные ардуиновские подходы для реализации различных технически-программных решений. Знакомая «обстановка» существенно упрощает и ускоряет разработку любительских конструкций.
«Arduino IDE для ESP8266 позволяет писать скетчи и загружать их одним кликом в ESP8266 в знакомой среде Arduino IDE».
Установка Arduino IDE для ESP8266 подробно описана тут.
Как ставил я и что получилось:
- Скачиваем архив arduino-1.6.1-windows.zip, который можно найти на указанной страничке. В архиве все что надо для работы, в том числе и сама система Arduino IDE.
- Распаковываем архив в отдельную папку, например: C:\arduino-1.6.1. Сокращаем вложения папок, если уж так вышло…
- Далее, чтоб поменьше было проблем, руками копируем dll-ку в корень проекта: «Для успешной компиляции перед началом работы необходимо скопировать файл libiconv-2.dll из папки ..\arduino-1.6.1\hardware\tools\avr\libexec\gcc\avr\4.8.1 в папку ..\arduino-1.6.1«
1. Подключаем USB-TTL к USB (в Диспетчере устройств отмечаем появившийся СОМ порт, пусть это вышел СОМ10).
2. Подключаем ESP8266 к USB-TTL: как это сделать — было разобрано в предыдущей статье.
3. Подключаем GPIO0 на землю, отключаем (если было включено) и вновь подаем питание на модуль ESP. Теперь все готово к прошивке: модуль ждет
загрузки программы через UART.
4. Запускаем Arduino IDE из папки C:\arduino-1.6.1 (см выше)
5. В меню Инструменты – Плата выбираем модуль ESP – Generic ESP8266 board (располагается в самом низу выпадающего списка — см скриншот выше)
6. В меню Инструменты выбираем порт, к которому подключен наш USB-TTL — это как раз наш новый порт СОМ10 (см.п.1)
7. В меню Инструменты – Программатор – esptool (тоже в самом низу)
8. Теперь можно создать новый скетч.
9. Жмем кнопку компиляции и загрузки скетча. На экране будет что-то типа (имена и размеры зависят от скетча):
Sketch uses 195 208 bytes (37%) of program storage space. Maximum is 524 288 bytes.
Uploading 34944 bytes from C:\WINDOWS\Temp\build1804685654077075156.tmp/WiFiWebServer.cpp_00000.bin to flash at 0x00000000
……………………………..
Uploading 160312 bytes from C:\WINDOWS\Temp\build1804685654077075156.tmp/WiFiWebServer.cpp_40000.bin to flash at 0x00040000
………………………………………………………………………………………………………….
10. По окончании процесса отключаем питание от ESP8266 отключая или не отключая USB-TTL от URXD и UTXD в зависимости от решаемой задачи. Отключаем GPIO0 от земли.
11. Подаем питание на модуль и смотрим как работает «наше творение».
Если требуется «мониторить UART», тогда (лучше до подачи питания на модуль):
10. По окончании процесса отключаем питание от ESP8266 не отключая USB-TTL от URXD и UTXD, отключаем GPIO0 от земли.
11. В меню Инструменты – Монитор последовательного порта, запускаем терминальную программу.
12. Выбираем скорость 115200.
13. Подаем питание на модуль и смотрим что происходит в терминале.
Первый проект — Blink светодиодом на UTXD
Естественно, первым делом, я запустил тестовый пример WiFiWebServer. Но правильно было бы «начать с малого» — с обычного Blink.
В вышеописанной инструкции на этапе п.8 открываем базовый пример Arduin-ы Blink. Слегка меняем текст скетча: вместо pin13, указываем 1 (вспомним, что к UTXD на плате модуля ESP-01 подключен светодиод, а UTXD это и есть GPIO1).
// текст скетча *Blink*
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin 13 as an output. тут меняем пин на номер 1
pinMode(1, OUTPUT);
digitalWrite(1, LOW); // turn the LED TxD on
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(1, HIGH); // turn the LED off (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(1, LOW); // turn the LED on by making the voltage LOW
delay(1000); // wait for a second
}
Запускаем компиляцию — наблюдаем мигание светодиода…
Интересно проверить скорость работы функций DigitalWrite(). Для этого меняем в скетче pin1 на GPIO2, подключаем к этому выводу осциллограф.
Уменьшаем задержку в функции Delay() с 1000 до 1 мс. Картинка с осциллограммой сигнала на выводе GPIO2 показана на фото.
Сигнал на GPIO2 для этого случая показан на фото.

Тут уже сказывается быстродействие «китайского DSO201«, но по периоду «как бы прямоугольников» можно оценить быстродействие модуля при использовании стандартных функций Arduino (период сигнала около 6 мкс).

