ESP32 прошивка

И так, вышла новая версия ESP.

Для меня всегда самой большой загадкой является связь какой-то железки и ПК на предмет прошивание первой, так что начну с

Подготовка среды Arduino IDE для ESP32

Идем по Ссылке на гит https://github.com/espressif/arduino-esp32 (для красноглазых читаем README.md )

  1. Скачиваем все содержимое.
  2. В папке  arduino/hardware создаем папку espressif
  3. в нее копируем содержимое архива из гита
  4. в папке tools запускем get.py просто двойным кликом, никакой черной магии
  5. нужно добавить питон в PATH: Система > Дополнительные параметры системы > Переменные среды > доавить в строчку PATH следующее ;C:\Python27
  6. скачиваем архив https://pypi.python.org/pypi/pyserial, распаковываем
  7. в распакованной папке запускаем GIT Bash и выполняем:
  8. python setup.py install
  9. запускаем Arduino IDE, проверяем Инструменты >Плата > ESP32 Dev Module. Если такая строчка есть, то все профит. среда настроена.
  10. Создаем новый проект, компилируем,
  11. Profit.

NB: убедитесь что финальный путь у вас /hardware/espressif/esp32/tools .

NB: установка питона https://www.python.org/downloads/release/python-2712/

 

Быстрый старт Nodemcu ( ESP8266 ) на Arduino

1. Качаем Arduino IDE 1.6.8 или выше.

2. Запускаем.

3. Открываем файл>настройки

4. Вбиваем в дополнительные ссылки http://arduino.esp8266.com/stable/package_esp8266com_index.json

5. Открываем Инструменты>Плата>Менеджер плат

6. Вбиваем в поисковик esp8266

7. Устанавливаем

8. Выбираем плату NodeMCU

9. Открываем пример WiFi web server

10. Вбиваем SSID и Password

11. Profit!

 

 

Оригинал: http://www.instructables.com/id/Quick-Start-to-Nodemcu-ESP8266-on-Arduino-IDE/

Использование библиотек из Arduino в AVRStudio

Чтобы использовать любую библиотеку Arduino в AVRStudio необходимо совсем немногое.

Разберем структуру пустого проекта. В общем то там 2 файла. Нас интересует следующий:

У него вот такое вот содержимое:

#define __AVR_ATmega328p__
#define __AVR_ATmega328P__
#define ARDUINO 161
#define ARDUINO_MAIN
#define F_CPU 16000000L
#define __AVR__
extern "C" void __cxa_pure_virtual() {;}

//
//

#include "...\arduino\hardware\arduino\avr\variants\standard\pins_arduino.h" 
#include "...\arduino\hardware\arduino\avr\cores\arduino\arduino.h"
#include <testtest.ino>

Нам понабоится подключить 2 библиотеки. Далее смотрим структуру main.cpp (точка входа)

...\arduino\hardware\arduino\avr\cores\arduino\main.cpp

Там собственно описана вся структура работы ардуины:

#include <Arduino.h>

//Declared weak in Arduino.h to allow user redefinitions.
int atexit(void (*func)()) { return 0; }

// Weak empty variant initialization function.
// May be redefined by variant files.
void initVariant() __attribute__((weak));
void initVariant() { }

int main(void)
{
	init();

	initVariant();

#if defined(USBCON)
	USBDevice.attach();
#endif
	
	setup();
    
	for (;;) {
		loop();
		if (serialEventRun) serialEventRun();
	}
        
	return 0;
}

Попробуем создать свой проект по такому лекалу.

  • Создаем новый проект
  • Копируем из ArduinoIDE папку C:\Users\Sainquake\Desktop\arduino\hardware\arduino\avr к себе в проект рядом с входной точкой проекта (Файл в котором main)
  • Пишем следующий код в теле. Подгрузку выделеной бибилотеки нужно отключить

  • Меняем пути на которые ругается компилятор

Все. Должно скомпилироваться.

Тестируем

Добавляем следующий код:

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

void loop(void){
	  digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)
	  delay(1000);              // wait for a second
	  digitalWrite(13, LOW);    // turn the LED off by making the voltage LOW
	  delay(1000);              // wait for a second
}

Добавляем библиотеки ваеринга:

#include "avr\cores\arduino\wiring.c"
#include "avr\cores\arduino\wiring_digital.c"

В них опять нужно поменять путь к pins_arduino.h

#include "C:\Users\Sainquake\Documents\Atmel Studio\6.2\GccApplication1\GccApplication1\avr\variants\standard\pins_arduino.h"

Компилируем, прошиваем. У меня нет программатора, так что я пользуюсь бутлоадером Arduino и прогой XLoader.

Результат следующий

 

 

Использование библиотек Arduino в AVR Studio

 

Оказывается уже сравнительно давно есть возможность программировать Arduino через нормальную IDE как AVR Studio.

Делается это довольно таки легко.

Есть такая великолепная компания http://www.visualmicro.com/. Она сделала расширение для AVR Studio которое позволяет без особых усилий использовать гигантское количество библиотек написаны под Arduino IDE.

Поставив новую AVR Studio 6.2 я увидел там интересную закладочку

Решил посмотреть и увидел это:

Решил установить это расширение и вот что получил в итоге.

В закладке Tools появилась вкладка с возможностями которые предоставляла Arduino IDE.

Из особенностей здесь 2 вещи галка Upload Using Programmer и Automatic Debugging. Плюс внизу помощь и настройки в которых указывается путь к папке с Arduino IDE.

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

Кроме этого появилась панель в меню:

В ней можно быстро выбрать порт плату и открыть терминал. Собственно вещи которыми пользуешься чаще всего.

Подсказки и подсветка!!!

А вот и самое главное! Сбылась моя мечта. Теперь все подсказки и подсветка работают нормально!

Последнее, как создать новый проект:

Соответственно Sketch Project создается в папке с проектами Arduino.

 

PS: Часто для меня важный момент, это бинарник. Теперь все по человечески, его можно залить отдельно, просто обычными способами.

Генерируем изображение на телеке с помощью Arduino

Недавно пришла мысль, сделать что-нибудь связанное с выводом на обычный телевизор. Поиски навели меня на вот эту статью:

http://www.instructables.com/id/TV-Out-with-Arduino/

и соответственно библиотеку которая там используется https://code.google.com/p/arduino-tvout/downloads/detail?name=TVout_R5.91.zip&can=2&q= .

Создатели библиотеки хорошо постарались над ее созданием и написали довольно таки подробный вики: https://code.google.com/p/arduino-tvout/wiki/Useage .

Предлагаю рассмотреть сначала функции библиотеки, а затем саму начинку библиотеки.

Библиоткеа

Рассмотрим работу библиотеки сразу на простом примере:

#include <TVout.h>
#include <fontALL.h>
TVout TV;
 
void setup ( )
{
  TV.begin(NTSC,120,96);
  TV.select_font(font6x8);
  TV.println("Sainquake");
  TV.delay ( 1000 );
}
int i=0;
void loop ( )
{
  TV.clear_screen ( );
  //TV.println("Sainquake");
  TV.draw_rect(0,0,119,95,WHITE);
  TV.print(10,40,"Happy new Year!!!");
  TV.draw_line(10,50,110,50,WHITE);
  TV.print(80,1,i);
  TV.delay ( 10 );
  i++;
}

 

В проекте подключены 2 библиотеки которые скачиваются по ссылке выше. Соответственно содержимое архива надо положить в папку Arduino/libraries/

Итак. В setup у нас стандартная конструкция инициализации: begin. В ней мы указываем стандарт телевидения NTSC или PAL. PAL вам нужен будет только, если вы захотите подключиться к старому ламповому телевизору. Далее задается количество строк и столбцов в будущем изображении. Может быть я что-то каряво сделал, но изменение этих параметров не дало никаких результатов. К сожалению разрешение изображение ограничивается тактовой частотой самой Arduino.

Ну и собственно сразу после инициализации мы можем подключить шрифт и писать текст на экране.

Далее в loop у меня есть несколько функций которые скорее всего понадобятся.

TV.clear_screen ( );

Очистка экрана.

TV.draw_rect(0,0,119,95,WHITE);

Рисуем квадрат. Соответственно аргументы: x0, y0, width, height, color (WHITE || BLACK || INVERT)

TV.draw_line(10,50,110,50,WHITE);

Рисуем линию. Аргументы такие же, только не ширина и высота, а координаты конечной точки.

По большому счету больше функций то и не понадобится.

Теперь о HW части.

По сути это все что вам нужно.

У контроллера выделяетя 2 вывода которые соединяются в один через резисторы. На схеме так же показаны диоды для защиты от обратного тока, но и без них работает.

Эти 2 вывода по распиновке Arduino UNO будут 7 – Video и 9 – Sync.

Теперь самое сложное, вам нужно найти у себя на телевизоре вход под названием тюльпан.

О том как работает библиотека

При инициализации работы (begin) в памяти занимается место под буфер экрана.

А дальше идет только работа с таймером. В функции render_setup запускается таймер1.

Во момент прерывания от переполнения таймера вызывается функция по ссылке line_handler();. В свою очередь эта ссылка меняется на разные функции. Вот тут то и начинается магия.

Далее последовательно по таймеру выполняются несколько функций:

  • vsync_line() – генерирует синхроимпульс
  • blank_line() – вызывает либо синхронизацию либо прорисовку строки.
  • active_line() – прорисовывает строку вызывая функцию render_line();

Содержимое render_line(); зависит от разрешения, в инициализации выбирается соответствующая функция выполняемая здесь. Эта функция отписана на асме, чтобы точно знать момент поднятия или опускания вывода. По сути в этой функции идет подсчет тактов и дергание ногой.

 Бонус

Сделал на основе этой библиотеки следующий проект. По сути создание 3D кубика взято из примера к той же библиотеке.

Описание: Ардуинка считывает с АЦП напряжение на потенциометре и вращает кубик со скоростью пропорционально считанному значению. + идет счет времени (левый верхний угол) + выводится откалиброванное считанное значение с АЦП (Правый верхний угол).

Bluetooth выключатель света

Подключение Bluetooth к Arduino UNO

По сути все это было описано уже много раз например:

Рассмотрим только код:

/*
 The circuit: 
 * RX is digital pin 10 (connect to TX of other device)
 * TX is digital pin 11 (connect to RX of other device)
 */
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
void setup()  
{
 mySerial.begin(9600);
 mySerial.println("Hello, world?");
}
char incomingByte;
void loop()
{
  if (mySerial.available()){
    incomingByte = mySerial.read();
    if(incomingByte == '0') {
       pinMode(13, INPUT); 
       mySerial.println("LED OFF. Press 1 to LED ON!");
    }
    if(incomingByte == '1') {
       pinMode(13, OUTPUT);
       mySerial.println("LED ON. Press 0 to LED OFF!");
    }
  }
}

Чтобы не было проблем подключаем Bluetooth через софтварный UART на других ногах.

Подключение реле

Чтобы не мучатся с разводкой купил следующие готовые платки http://ru.aliexpress.com/item/5V-One-1-Channel-Relay-Module. Там 3 вывода. Земля, питание и дата. На выходе общая точка и 2 вывода. И вот здесь самый главный нюанс – принцип работы ключа.

При подключении ее к любой ноге контроллера замыкание реле происходит при установке ее как вывод. Ввод – реле разомкнуто.

pinMode(13, INPUT);

Как видно на рисунке реле держит до 10А, то есть через него можно подключать электрочайник или пылесос. В моем случае лампочку.

Тест

Скачал https://play.google.com/store/apps/details?id=Qwerty.BluetoothTerminal. Особых проблем нет, только при поиске не определяются имена устройств, так что пришлось перебирать.

Вот собственно как это работает.

Документация на HC-XX: http://www.exp-tech.de/service/datasheet/HC-Serial-Bluetooth-Products.pdf