Sposób sterowania diodą, przedstawiony w poprzednim odcinku, miał kilka istotnych wad.
Po pierwsze, mikrokontroler ESP32 musiał połączyć się z jakąś siecią Wi-Fi. Aby to zrobić, musiał najpierw wiedzieć, jak nazywa się ta sieć i jakie jest do niej hasło. My zapisaliśmy te dane w pliku wifi_config.py, podając je w edytorze Thonny. W przypadku komercyjnego produktu musielibyśmy te dane dostarczyć w sposób bardziej przyjazny użytkownikowi, np. poprzez aplikację na telefonie, która prześle je przez Bluetooth, albo poprzez access point, podobnie jak to robią routery Wi-Fi.
Po drugie, aby otworzyć stronę internetową, generowaną przez ESP32, musieliśmy znać jego adres IP. Skąd go wziąć, jeżeli nie mamy dostępu do konsoli? Można je uzyskać m.in. ze strony konfiguracyjnej routera Wi-Fi, do którego ESP32 jest podłączone, ale to również może przerosnąć mniej zaawansowanego użytkownika.
Celem rozwiązań z tego odcinka kursu jest maksymalne uproszczenie procesu otwierania strony (generowanej przez ESP32) w przeglądarce internetowej na komputerze, telefonie czy tablecie. Zrobimy to tak, że jedyne, co użytkownik będzie musiał zrobić, to wyszukanie dostępnej sieci Wi-Fi i połączenie się z tą, która jest generowana przez ESP32. Następnie komputer lub telefon automatycznie otworzy stronę lub wyświetli pytanie, czy ma taką stronę otworzyć – ten szczegół jest już zależny od używanego systemu operacyjnego. Niezależnie od tego, w opisanym scenariuszu użytkownik nie będzie musiał w żaden sposób konfigurować ESP32 i nie będzie potrzebował wiedzieć nic na temat adresów IP.
Strona WWW otwierająca się automatycznie po połączeniu z siecią Wi-Fi to tzw. captive portal. Najczęściej spotykamy to rozwiązanie, łącząc się do różnych hotspotów w miejscach publicznych. Po podłączeniu do takiej sieci często pojawia się nam strona, na której trzeba zaznaczyć checkbox potwierdzający akceptację regulaminu. Następnie strona się zamyka i mamy wtedy dostęp do Internetu.
Main
Program z tego odcinka kursu będzie dosyć rozbudowany. Dlatego podzielimy go na trzy moduły plus jeden główny o nazwie main, którego kod zaprezentowano na listingu 1. Jest to plik, który wykonuje się jako pierwszy. Jego zadaniem jest zaimportowanie modułów, które omówimy w dalszej części kursu oraz uruchomienie ich. Są to:
- dns – serwer DNS, który wykorzystuje socket do obsługi zapytań na porcie 53, poprzez protokół UDP.
- http – serwer HTTP, który korzysta z socketa do obsługi zapytań na porcie 80, poprzez protokół TCP.
- wifi_ap – moduł, którego celem jest uruchomienie ESP32 w roli access pointa Wi-Fi; tworzy sieć o żądanej nazwie. Aby uprościć implementację, sieć jest całkowicie otwarta, nie ma hasła ani żadnych zabezpieczeń.