ESP8266-01 i Raspberry Pi
Posted: 25 August 2015, 19:24 - Tue
Zakupiłem kilka modułów ESP-01, ESP-12 na znanym nierodzimym portalu (2-4$). Przykład oparty jest na ESP-01. Ważne, by pamiętać że ESP nie lubi zasilania powyżej 3.3V i tym samym wymagane są odpowiednie poziomy napięć na porcie szeregowym... dopasowanie napięć automatycznie zapewnia nam Malina RPi - stąd też przygodę warto zacząć od podłączenia ESP do Maliny.
Tak to wygląda: A tak wygląda płytka PCB i pinout modułu:: Raspberry Pi i port szeregowy...
By móc korzystać z portu szeregowego na początku musimy wyłączyć domyślną obsługę terminala na porcie /dev/ttyAMA0. Robimy to edytując poniższe pliki:
/etc/inittab
/boot/cmdline.txt[/code]
w /etc/inittab należy odszukać i zakomentować linię (# na początku):
Następnie wyłączamy domyślne komunikaty na porcie szeregowym od jądra podczas startu systemu, w /boot/cmdline.txt zawartość podobną do:
u mnie po modyfikacji plik zawiera:
musimy pozbyć się zaznaczonego fragmentu dotyczącego portu szeregowego.
Po reboocie możemy już korzystać z portu szeregowego... np przez użycie:
Oczywiście minicom czy inny program do obsługi terminala (np. screen) musimy sobie doinstalować.
Teraz czas na podłączenie ESP8266 do Maliny.
Połączenie jest trywialne, łączymy odpowiednio RX, TX, GND, 3V3 Power od strony RPi do UTXD, URXD, GND i UCC układu ESP, należy jeszcze podpiąć na stałe CH_PD do UCC oraz zadbać o możliwość chwilowego podpięcia GPIO0 do GND - będzie to potrzebne w procesie flashowania ESP.
Pinout portu P1 Maliny:
ESP8266 i Raspberry Pi
Flashowanie ESP:
Moduły oryginalnie posiadają interface z obsługą komend AT, jednak proponuję wykorzystać projekt NodeMCU, który pozwoli nam na znacznie łatwiejszą komunikację a dodatkowo oddaje w nasze ręce bezpośredni interpreter języka eLua.
Do flashowania potrzebujemy tylko jednego skryptu esptool.py w Pythonie, do pobrania w repozytorium GItHub-a:
Potrzebujemy jeszcze wsadu, do pobrania również z GitHub-a:
Ja używam wersji najbardziej aktualnej, jeśli ktoś musi skorzystać z innej - odszukaj jej w drzewie projektu i ściągnij najbardziej Ci odpowiadającą...
Flashujemy:
Podłączamy na czas flashowania GPIO0 do masy ESP i wykonujemy polecenie
gdzie nodemcu_latest.bin to ściągnięty z git-a wsad.
Po kilku sekundach możemy zacząć zabawę...
Połączenie i konfiguracja
z ESP z poziomu RPi łączymy się via RS:
dostajemy znak zachęty w postaci '>' i możemy skonfigurować połączenie z Wifi:
gdzie: --xxx - odpowiedzi konsoli ESP
w miejsce SSID i password należy wpisać odpowiednie ustawienia dla własnej sieci. Adres IP w odpowiedzi na print(ip) jest przykładowym - pobranym przez ESP z DHCP naszego rutera WiFi. Teraz już możemy komunikować się z ESP via Wifi.
Co możemy zrobić?
Łatwiej wymienić czego nie można... Zacząć możemy od termometru na 1wire i prezentacji na serwerze www napisanym w eLua na ESP. Przykłady dostępne są na stronie projektu:
nodeMCU Firmware
i to by było na tyle... przedstawiony moduł posiada co prawda tylko 2 piny GPIO lecz dokładnie ta sama zasada tyczy się ESP z większą ilością GPIO.
Życzę udanych projektów.
Tak to wygląda: A tak wygląda płytka PCB i pinout modułu:: Raspberry Pi i port szeregowy...
By móc korzystać z portu szeregowego na początku musimy wyłączyć domyślną obsługę terminala na porcie /dev/ttyAMA0. Robimy to edytując poniższe pliki:
/etc/inittab
/boot/cmdline.txt[/code]
w /etc/inittab należy odszukać i zakomentować linię (# na początku):
Code: Select all
T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
Code: Select all
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
Code: Select all
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
Po reboocie możemy już korzystać z portu szeregowego... np przez użycie:
Code: Select all
minicom -b 9600 -o -D /dev/ttyAMA0
Teraz czas na podłączenie ESP8266 do Maliny.
Połączenie jest trywialne, łączymy odpowiednio RX, TX, GND, 3V3 Power od strony RPi do UTXD, URXD, GND i UCC układu ESP, należy jeszcze podpiąć na stałe CH_PD do UCC oraz zadbać o możliwość chwilowego podpięcia GPIO0 do GND - będzie to potrzebne w procesie flashowania ESP.
Pinout portu P1 Maliny:
ESP8266 i Raspberry Pi
Flashowanie ESP:
Moduły oryginalnie posiadają interface z obsługą komend AT, jednak proponuję wykorzystać projekt NodeMCU, który pozwoli nam na znacznie łatwiejszą komunikację a dodatkowo oddaje w nasze ręce bezpośredni interpreter języka eLua.
Do flashowania potrzebujemy tylko jednego skryptu esptool.py w Pythonie, do pobrania w repozytorium GItHub-a:
Code: Select all
git clone https://github.com/themadinventor/esptool
Code: Select all
wget https://github.com/nodemcu/nodemcu-firmware/tree/master/pre_build/latest
Flashujemy:
Podłączamy na czas flashowania GPIO0 do masy ESP i wykonujemy polecenie
Code: Select all
./esptool.py --port /dev/ttyAMA0 write_flash 0x00000 nodemcu_latest.bin
Po kilku sekundach możemy zacząć zabawę...
Połączenie i konfiguracja
z ESP z poziomu RPi łączymy się via RS:
Code: Select all
minicom -b 9600 -o -D /dev/ttyAMA0
Code: Select all
ip = wifi.sta.getip()
print(ip)
--nil
wifi.setmode(wifi.STATION)
wifi.sta.config("SSID","password")
ip = wifi.sta.getip()
print(ip)
--192.168.18.110
gdzie: --xxx - odpowiedzi konsoli ESP
w miejsce SSID i password należy wpisać odpowiednie ustawienia dla własnej sieci. Adres IP w odpowiedzi na print(ip) jest przykładowym - pobranym przez ESP z DHCP naszego rutera WiFi. Teraz już możemy komunikować się z ESP via Wifi.
Co możemy zrobić?
Łatwiej wymienić czego nie można... Zacząć możemy od termometru na 1wire i prezentacji na serwerze www napisanym w eLua na ESP. Przykłady dostępne są na stronie projektu:
nodeMCU Firmware
i to by było na tyle... przedstawiony moduł posiada co prawda tylko 2 piny GPIO lecz dokładnie ta sama zasada tyczy się ESP z większą ilością GPIO.
Życzę udanych projektów.