Съдържание:

Флаш ESP-01 (ESP8266) Без USB-към-сериен адаптер, използващ Raspberry Pi: 3 стъпки
Флаш ESP-01 (ESP8266) Без USB-към-сериен адаптер, използващ Raspberry Pi: 3 стъпки

Видео: Флаш ESP-01 (ESP8266) Без USB-към-сериен адаптер, използващ Raspberry Pi: 3 стъпки

Видео: Флаш ESP-01 (ESP8266) Без USB-към-сериен адаптер, използващ Raspberry Pi: 3 стъпки
Видео: Easiest way to flash Sonoff, Shelly, Wemos or any ESP8266 + HomeKit support with no Hubs 2024, Юли
Anonim
Flash ESP-01 (ESP8266) Без USB-към-сериен адаптер, използващ Raspberry Pi
Flash ESP-01 (ESP8266) Без USB-към-сериен адаптер, използващ Raspberry Pi

Тази инструкция ви води как да започнете да програмирате вашия микроконтролер ESP8266 на WSPI модул ESP-01. Всичко, от което се нуждаете, за да започнете (освен модула ESP-01, разбира се) е

  • Малина Пи
  • Кабелни проводници
  • 10K резистор

Исках да ремонтирам стара нощна лампа в модерна LED нощна лампа, управлявана от Alexa. Нищо фантастично е просто да го включите/изключите с гласова команда. Поръчах най-простия ESP-01 WIFI модул, реле и проводник със светодиоди онлайн и напълно забравих да поръчам USB-към-сериен адаптер за програмиране на микроконтролер ESP8266. Но тъй като имах Raspberry Pi и както Raspberry Pi, така и платката ESP-01 имаха UART щифтове, реших, че мога да използвам своя RPi за програмиране на ESP8266 без адаптера.

Стъпка 1: Конфигурирайте Rapberry Pi

Конфигурирайте Rapberry Pi
Конфигурирайте Rapberry Pi

Използвах Raspberry Pi 3 Model B+, но инструкциите трябва да работят на други версии, особено на модел B.

И така, първо на първо място - трябва да активираме UART на Pi.

Отидете на конфигурационните настройки на RPi. В прозореца на терминала изпълнете

$ sudo raspi-config

Отидете на 5 Опции за свързване, след което изберете P6 Serial. След това бяхте подканени Искате ли черупка за вход да бъде достъпна през сериен? изберете, тъй като не искаме да използваме UART за стартиране на Pi без глава, а за комуникация с други устройства, следователно на следния екран при запитване Искате ли хардуерът на серийния порт да бъде активиран? изберете. Рестартирайте Pi, както бъдете подканени. Сега UART трябва да бъде разрешен за серийна комуникация на RX и TX пин на Raspberry Pi 3. Забележка: след това трябва да се появи нов запис enable_uart = 1 в края на /boot/config.txt.

Стъпка 2: Свържете ESP-01 към Raspberry Pi

Свържете ESP-01 към Raspberry Pi
Свържете ESP-01 към Raspberry Pi

Сега започваме да свързваме всичко заедно.

Първо, идентифицирайте на вашите RPi 3.3V захранващи и GND (земни) щифтове за захранване на микроконтролера ESP8266, TXD (предаване) и RXD (приемане) щифтове за комуникация и два щифта с общо предназначение за работа с ESP8266 (щифтове, които могат да бъдат зададени или високи или ниско). Потърсете подреждането на щифтове на pinout.xyz или въведете терминал:

$ pinout

Второ идентифицирайте необходимите щифтове на ESP-01. Но в началото трябва да имаме разбиране за щифтовете ESP-01. Открих редица полезни ресурси, достъпни в интернет, които да ви помогнат в това отношение. Този е най -краткият, докато този дава много по -добро обяснение. Накратко: Има 8 пина, ще ни трябват 7 от тях, а именно VCC захранване и GND (заземяване) щифтове за захранване, TXD и RXD щифтове за комуникация и RST (нулиране), CH_PD (Chip Power Down, понякога обозначен CH_EN или активиране на чип) и GPIO0 за работа с модула. Обикновено ESP8266 работи в обикновен режим, но когато качва код в ESP8266, той трябва да бъде във флаш режим. За нормален или нормален режим на работа модулът трябва да бъде свързан към захранване (очевидно), но също така и щифтът CH_PD трябва да бъде свързан към VCC чрез 10K (тази стойност варира в различните ресурси, намерих стойности до 3K) издърпване резистор при зареждане. от другата страна, за да влезете в режим на мигане или програмиране, трябва да заземите щифта GPIO0 при зареждане. За да се предотврати неограничен поток на ток през GPIO0 при заземяване, се препоръчва да се свърже GPIO0 към земята чрез някакъв резистор с ниско съпротивление 300Ω - 470Ω (повече за това тук). ПИНът за RST, както подсказва името, нулира (или рестартира) MCU. По време на нормална работа той може да бъде свързан към VCC чрез 10K издърпващ се резистор, но трябва да бъде заземен за нулиране на микроконтролера. Въпреки че винаги е възможно да се използват физически бутони за заземяване на щифтове RST и GPIO0 (или дори ръчно свързване на проводници, за да се симулира бутон), е много по -приятно изживяването да се използват пинове Raspberry Pi за задаване на високо и ниско напрежение на RST и GPIO0 на модула щифтове. Също така няма нужда от 10K и 470Ω резистори тогава.

Като сме наясно с особеностите на щифтовете ESP-01, можем да започнем да свързваме всичко заедно. Можете да използвате следната таблица като справка заедно с чертежа по -горе:

ESP-01 Raspberry Pi

  • VCC (3.3V) щифт #1 (3.3V)
  • GND щифт #6 (GND)
  • TXD щифт #10 (RXD / BCM 15)
  • RXD щифт #8 (TXD / BCM 14)
  • CH_PD пин #1 (3.3V)
  • RST пин #3 (BCM 2)
  • GPIO 0 пин #5 (BMC 5)

Свържете VCC щифта последен. Екземплярът, към който сте свързали VCC щифта на вашия Wi-Fi модул, ще се включи. Използвайте screen или minicom, за да проверите дали RPi и ESP8266 могат да комуникират чрез UART (забележка: може да се наложи първо да инсталирате screen или minicom, тъй като изглежда не са инсталирани на Raspbian по подразбиране).

Използване на екранното изпълнение:

$ sudo screen /dev /serial0 115200

Използване на minicom run:

$ sudo minicom -b 115200 -o -D /dev /serial0

Забележка: много онлайн ресурси предлагат свързване към ESP8266 на /dev /ttyAMA0, но това не работи с RPi 3 или по -нова версия (включително нула W) според документацията за RPi. Вместо това се свържете чрез /dev /serial0 или /dev /ttyS0.

След като въведете екран или миником, използвайте AT команди за комуникация с ESP8266. Въведете AT, след това натиснете Enter и след това натиснете Ctrl+J, за да изпратите команда. Трябва да получите ОК в отговор. Списък на наличните AT команди можете да намерите на espressiff.com или просто тук.

Ако устройствата са физически свързани и разговарят помежду си, можем да стигнем до програмиране на RPi GPIO щифтовете и накрая самия ESP8266.

Стъпка 3: Настройка на софтуера (Python за работа и Arduino IDE за програмиране)

ЧАСТ 1. Използване на python за превключване на режими на ESP8266

Както бе споменато по -горе, удобно е да използвате GPIO щифтове на RPI за превключване на режимите на работа на ESP8266. Написах два основни кода на python, които поставят ESP8266 в обикновен или програмен режим.

Редовен режим: За да поставим микроконтролера в нормален режим на работа, просто трябва да го захранваме и да свържем CH_PD чрез издърпващ се резистор към VCC, но за да превключим MCU от програмиране в нормален режим, трябва да го нулираме (помислете за рестартиране). За да направим това на RPi, ще изтеглим за кратко GPIO на RPi, свързан с RST пин на ESP-01 (по подразбиране пина RPi, който използвах за нулиране, е настроен на HIGH). Колко накратко? За мен това е спекулативен въпрос. Можете да опитате различни интервали от време, но открих, че 200 - 500 ms работят добре. Пишете в коментарите, ако имате по -добра представа. Запазете кода си като reset.py

#!/usr/bin/python

импортиране на RPi. GPIO като GPIO време за импортиране GPIO.setmode (GPIO. BOARD) # задава идентификация на GPIO чрез физически номера на пинове resetPin = 3 # идентифициране на физически пин RPi, свързан към ESP8266 RST пин GPIO.setup (resetPin, GPIO. OUT) # задаване на нулиране пин като изход GPIO.output (resetPin, GPIO. LOW) # спад на напрежението на RST pin time.sleep (.2) # изчакайте.2 s GPIO.output (resetPin, GPIO. HIGH) # възстановете напрежението на RST пин GPIO. cleanup () # щифтове за нулиране на RPI за предотвратяване на бъдещи предупреждения по време на изпълнение

  • Режим на програмиране: За да поставим MCU в режим на програмиране, трябва да захранваме ESP8266 с GPIO0 заземен или алтернативно да го нулираме и заземяваме GPIO0 по време на зареждане (отново точната продължителност на спада на напрежението не ми е известна, така че не бъдете стриктно ръководени от използваните стойности). Запазете кода като flash.py или изтеглете по -долу. Последователността на действията е следната:

    • издърпайте надолу RST щифт
    • издърпайте щифта GPIO0
    • издърпайте RST щифта
    • издърпайте щифта GPIO0

#!/usr/bin/python

импортиране на RPi. GPIO като GPIO време за импортиране GPIO.setmode (GPIO. BOARD) # задава GPIO идентификация чрез физически номера на пинове resetPin = 3 # идентифицира физически пин RPi, свързан към ESP8266 RST пин flashPin = 5 # идентифицира физически пин RPi, свързан към ESP8266 GPIO0 пин GPIO.setup (resetPin, GPIO. OUT) # задайте щифта за нулиране като изход GPIO.setup (flashPin, GPIO. OUT) # задайте извода за флаш като изход GPIO.output (resetPin, GPIO. LOW) # спад на напрежението по време на изхода на RST. sleep (.2) # нужда от това изчакване е спекулативен GPIO.output (flashPin, GPIO. LOW) # спад на напрежението на GPIO0 time.sleep (.2) # необходимостта от това чакане е спекулативен GPIO.output (resetPin, GPIO. HIGH) # стартирайте зареждането на ESP8266 time.sleep (.5) # изчакайте ESP8266 да зареди GPIO.ouput (flashPin. GPIO. HIGH) # възстановяване на напрежението на GPIO pinGPIO.cleanup () # щифтове за нулиране на RPI за предотвратяване на бъдещи предупреждения по време на работа

В разрешенията за смяна на терминала:

$ sudo chmod +x flash.py

$ sudo chmod +x reset.py

Отсега нататък, когато трябва да влезете в режим на програмиране, изпълнен в терминал:

$ python /flash.py

след качване на код, за да влезете в нормален режим на работа, изпълнете:

$ python /reset.py

В този момент може да искате да актуализирате фърмуера на ESP8266. Има много онлайн уроци за това как да направите това, така че няма да навлизам в подробности как да го направя.

ЧАСТ 2. Настройване на Arduino IDE

ако вече имате инсталирана Arduino IDE, все пак може да искате да прегледате раздела, като се уверите, че вашата IDE е готова за ESP8266.

На Rapberry Pi можете да използвате Arduino IDE за програмиране на вашия ESP8266. Има два начина за инсталиране на IDE на RPi:

  • чрез командния ред от хранилища с помощта на apt-get install
  • изтеглете и инсталирайте ръчно от arduino.cc.

Силно препоръчвам да тръгнете по последния път. IDE версията от хранилища изглежда е остаряла и със сигурност ще трябва да направите повече, преди да сте готови да започнете да програмирате ESP8266. За да избегнете проблеми, отидете на страницата за изтегляне на Arduino.cc и изтеглете Linux ARM версията. След това декомпресирайте и инсталирайте: Ако името на изтегления файл изглежда нещо подобно на този arduino-X. Y. Z-linuxarm.tar.xz, в папката за изтегляне стартирайте:

$ tar -xvf arduino-X. Y. Z-linuxarm.tar.xz

Това трябва да декомпресира файла в папката arduino-X. Y. Z. Бягай:

$ sudo./arduino-X. Y. Z/install.sh

Това трябва да инсталира IDE. След като инсталацията приключи, стартирайте IDE.

  • От IDE на Arduino отидете на Файл> Предпочитания. Потърсете „Допълнителни URL адреси на мениджъра на борда“в долната част на прозореца с предпочитания. Въведете https://arduino.esp8266.com/stable/package_esp8266com_index.json в полето „Допълнителни URL адреси на мениджъра на борда“, щракнете върху бутона „OK“.
  • Отидете на Инструменти> Борд: XXX> Мениджър на табла. В прозореца използвайте търсене или превъртете надолу, изберете менюто на платката ESP8266 и щракнете върху инсталиране. Изчакайте инсталацията да приключи и затворете прозореца.
  • Отново отидете на Tools> Board: XXX и потърсете ESP8266 дъски. Изберете Общ модул ESP8266.

Сега IDE е готов за програмиране на ESP8266. Въведете или поставете желания код в IDE прозореца и го запазете. Щракнете върху Качване. От терминал, стартиращ flash.py, това трябва да постави дъската ви в режим на програмиране. Изчакайте няколко минути, докато IDE завърши компилирането и качването (забележка: ESP-01 обикновено идва с 2 светодиода, синият светодиод ще мига, докато кодът се качва) и стартирайте reset.py. Сега вашата платка ESP-01 е готова да изпълнява задължения.

Препоръчано: