-
ZANIM ROZPOCZNIEMY Przy pierwszym podłączeniu karty IoT-WiFi (zwanej dalej także NanoESP) może się zdarzyć, że komputer nie odnajdzie automatycznie sterownika niezbędnego do konwertera portu USB na port szeregowy. W takim przypadku należy pobrać sterownik ze strony www.iot.fkainka.de/driver i zainstalować ręcznie. W oprogramowaniu Arduino można wtedy wybrać port jako karetę Arduino Nano (procesor: Atmega328). Następnie kontroler powinien być w pełni gotowy do pracy.
-
tam forum, nowe projekty użytkowników a także opisane tutaj programy w ich najnowszych wersjach. W pakiecie do nauki znajduje się także karta z gniazdem, do której można podłączyć NanoESP - jak pokazano na ilustracji. Dzięki temu uzyskuje się dużo miejsca na eksperymenty a moduł WLAN wystaje z tyłu spoza karty. Kabel z wtykiem micro-USB można wtedy podłączyć tak, jak widać na ilustracji w kolejnym rozdziale - wtedy kabel prawie wcale nie przeszkadza.
-
poziom 5 V na kompatybilny poziom 3,3 V. We własnych projektach nie należy więc używać pinów 11 i 12. Dalsze istotne właściwości sprzętowe karty zostały zestawione w poniższej tabeli.
-
1 1 1m 2 1 1 1 1 1 1 1 1 1 Karta IoT-WiFi (NanoESP) płytka ze złączami wtykowymi drut sterujący przyciski klips 9-V dioda LED (czerwona) dioda LED RGB (4 piny podłączeniowe) opornik 10 kiloomów (brązowy-czarny-pomarańczowy) opornik 1 kiloom (brązowy-czarny-czerwony) fototranzystor (2 piny podłączeniowe) NTC 10 kiloomów głośnik piezoelektryczny potencjometr 10 kiloomów z czerwonym pokrętłem POZNAWANIE MODUŁU Pierwszy rozdział opisuje podstawowe funkcje modułu WLAN. Moduł jest sterowany tzw. poleceniami AT.
-
Arduino. Przedtem jednak należy dokonać dwóch ważnych ustawień na szeregowym monitorze: w dolnym prawym rogu należy ustawić prędkość transmisji sygnału na 19200 a w kratce obok ustawić CR i NL. Teraz pojawia się już pierwszy komunikat, jest to AT a kilka wierszy niżej OK. Polecenie AT zostało wysłane przez mikrokontroler do modułu ESP a moduł wysłał odpowiedź OK. Oznacza to, że moduł WLAN działa i jest gotowy do pracy. Ustawienia terminala: CR i NL oraz prędkość transmisji sygnału 19200 1.1.
-
ATE0 Tym poleceniem można dezaktywować tzw. echo modułu. Oznacza to, że wysłane polecenie nie zostanie odesłane z powrotem, lecz zostanie wysłana sama odpowiedź. Jeśli zostanie wysłane np. AT, w odpowiedni nie przyjdzie najpierw AT a później OK, lecz tylko samo OK . Jednakże do pierwszych prób zaleca się użycie polecenia ATE1 do ponownej aktywacji echa. Pierwsze próby z poleceniami AT 1.1.2 | Polecenia WLAN Poniższymi poleceniami WLAN można zmieniać właściwości WLAN modułu.
-
Jako wartość zwrotna przychodzi zazwyczaj +CWMODE=2 a za nim OK. Po wpisaniu AT+CWMODE=? moduł odpowiada podając możliwe parametry polecenia, w tym przypadku 1-3. CWMODE to polecenie, którym można ustalić tryb WLAN. Są trzy tryby pracy, które są objaśnione poniżej. 1 AT+CWMODE=2 – moduł jako Access Point (tryb AP) Fabrycznie moduł pracuje jako Access Point (punkt dostępu). Oznacza to, że za pomocą urządzenia obsługującego WLAN, jak np.
-
. Moduł w trybie stacji. Adres IP połączonego komputera jest zaznaczony. 2 AT+CWMODE=1 – moduł w trybie stacji Poleceniem AT+CWMODE=1 ustawia się moduł w trybie stacji. Ten tryb umożliwia nawiązanie połączenia z routerem WLAN. Dzięki temu moduł jest połączony także z internetem i zyskuje wiele więcej możliwości. Wcześniej jednak można poleceniem AT+CWLAP wyświetlić wszystkie sieci znajdujące się w zasięgu sprawdzając w ten sposób, czy Twoja sieć jest w zasięgu modułu.
-
sieci WLAN (zwaną także SSID) oraz hasło, obie wartości ponownie w cudzysłowie i oddzielone przecinkami. Nawiązywanie połączenia z drugim modułem, na którym ustawione są dane opisane w poprzednim rozdziale dane, wyglądałoby więc następująco: AT+CWJAP="MyNanoESP","MyPassword" Nawiązywanie połączenia może trwać kilka sekund i powinno być potwierdzone przez zwrotne OK. Można także wywołać nadany przez router adres IP modułu. Służy do tego polecenie AT+CIFSR .
-
3 AT+CWMODE=3 – tryb dual Trzeci dostępny tryb ustawień WLAN to tryb podwójny. Jak już sama nazwa wskazuje, tryb ten umożliwia pracę modułu zarówno w trybie stacji jak i w trybie AP. Oznacza to, że urządzenia mogą zarówno nawiązywać bezpośrednie połączenie WLAN z modułem oraz przez router jako stację pośrednią. Jest to tryb bardzo praktyczny, gdy np.
-
001 #include 002 SoftwareSerial esp8266(11, 12); Tak samo, jak przy zwykłym porcie szeregowym, można poleceniami esp8266.print lub esp8266.println przesyłać bajty lub całe wiersze. Szczególnie praktyczne są także polecenia esp8266.find i esp8266.findUntil, którymi przychodzący strumień można sprawdzić pod kątem określonych łańcuchów znaków. W ten sposób bardzo proste jest wyłapanie pasującej odpowiedzi modułu.
-
wysłane polecenie, dzięki czemu można w łatwy sposób sprawdzić, które polecenie stwarza problemy. Nie wszystkie polecenia AT mają jednoznaczne lub jednowierszowe wartości zwrotne. Gdy pojawia się np. zapytanie o adres IP, z reguły nie ma wcześniej znanej wartości. Dlatego jest druga funkcja sendCom(), która potrzebuje jedynie parametru command i odsyła cały odebrany strumień. Strumień nie może być jednak zbyt długi, ponieważ może dojść do przepełnienia buforu SoftwareSerial .
-
aby sprawdzić, gdie występuje błąd. 001 //---Debug Functions--002 void serialDebug() { 003 while (true) 004 { 005 if (esp8266.available()) 006 Serial.write(esp8266.read()); 007 if (Serial.available()) 008 009 esp8266.write(Serial.read()); } 010 } 3 Konfiguracja Aby programy były ogólnie zbudowane bardziej przejrzyście, większość ustawień została przeniesiona do własnych funkcji, przede wszystkim do funkcji espConfig, w której ustawia się najważniejsze parametry dla danego programu.
-
015 else 016 { 017 018 success &= false; } 019 020 success &= sendCom("AT+CIPMODE=0", "OK"); 021 success &= sendCom("AT+CIPMUX=0", "OK"); 022 023 return success; 024 } Na początku funkcji najpierw ustawiana jest zmienna success na true , ponieważ ta zmienna jest łączona z różnymi funkcjami ORAZ. Oznacza to, że nawet gdy tylko jedna z funkcji zwróci wartość false, wartość success natychmiast zmienia się na false i występuje niepowodzenie całej konfiguracji.
-
006 success &= (sendCom("AT+CWJAP=\"" + String(vSSID) + "\",\"" + String(vPASSWORT) + "\"", "OK")); 007 esp8266.setTimeout(1000); 008 return success; 009 } Funkcja configStation() została wywołana w funkcjiespConfig(). Tutaj dokonuje się ustawienia modułu WLAN w trybie stacji poleceniem CWMODE a następnie połączenia z siecią poleceniem CWJAP. Nawiązywanie połączenia może trwać bardzo długo, w związku z czym timeout jest tutaj na krótko wydłużany do 20 sekund.
-
004 Serial.begin(19200); 005 // set the data rate for the SoftwareSerial port 006 esp8266.begin(19200); 007 008 if (!espConfig()) serialDebug(); 009 else debug("Config OK"); 010 011 if (sendCom("AT+PING=\"www.google.de\"", "OK")) 012 { 013 Serial.println("Ping OK"); 014 digitalWrite(13, HIGH); 015 } 016 else 017 { 018 019 Serial.
-
zapala się dioda LED na pinie 13, która na karcie oznaczona jest symbolem D3 . Dzięki temu pojawia się potwierdzenie także wtedy, gdy moduł nie jest podłączony do komputera z monitorem szeregowym. W tej próbie jednak dioda LED potrzebna jest do informacji zwrotnej o statusie sygnału ping. Zapytanie odbywa się także bezpośrednio w kolejnym wierszu po konfiguracji. Wysyłane jest polecenie AT+PING z adresem Google jako parametr. Zamiast tego adresu można wysłać zapytanie także na adres IP w sieci lokalnej.
-
Tekst źródłowy tego projektu różni się od poprzedniej próby przede wszystkim w następujących funkcjach: 001 void findSSID() 002 { 003 004 005 esp8266.println("AT+CWLAP"); if (esp8266.
-
zasadzie inne sieci NanoESP w zasięgu. Ale na początku programu w #define ToFindSSID można wpisać inne SSID. Można w ten sposób np. sprawdzić, jak daleko sięga dana sieć WLAN. UDP I IP Ten rozdział dotyczy podstawowej wymiany danych między dwoma systemami poprzez sieć WLAN. Zajmiemy się tutaj takimi tematami jak porty IP oraz protokół UDP. W pierwszym rzędzie należy więc wyjaśnić te podstawowe pojęcia. Co to jest adres IP? Adres IP działa tak, jak adres pocztowy.
-
można dowolnie wybierać port, jednakże występują porty standardowe ułatwiające pracę z aplikacjami sieciowymi. Lista portów standardowych znajduje się na stronie https://de.wikipedia.org/wiki/Liste_der_standardisierten_Ports Co to jest UDP? UDP to skrót od User Datagram Protocol. Jest to minimalny bezpołączeniowy protokół internetowy. Oznacza to, że jest on w zasadzie bardziej minimalistyczny i prostszy niż inne protokoły internetowe, jak np. TCP, którym zajmiemy się później.
-
Po pobraniu i zainstalowaniu programu można połączyć komputer z otwartą siecią NanoESP. Należy zwrócić uwagę, aby firewall rozpoznał tę sieć jako sieć domową i nie blokował żadnych danych. Komputer powinien otrzymać IP 192.168.4.2. Można to sprawdzić wysyłając polecenie AT+CWLIF przez szeregowy monitor do modułu. To polecenie powoduje pokazanie wszystkich komputerów połączonych z Access Point wraz z adresami IP i MAC.
-
Wiadomość została przekazana pomyślnie. Aby wysłać dane, należy użyć polecenia: AT+CIPSEND=7 Cyfra 7 oznacza tutaj ilość wysyłanych znaków. Pojawia się znak > jako odpowiedź. Oznacza to, że teraz można przesłać wiadomość. Należy wpisać Hello i ponownie potwierdzić przez [Enter]. Jako odpowiedź moduł wysyła SEND OK mimo, że zostało wpisanych tylko pięć znaków.
-
Wiadomość została odebrana przez Packet Sender. 001 boolean configUDP() 002 { 003 boolean success = true; 004 005 success &= (sendCom("AT+CIPMODE=0", "OK")); 006 success &= (sendCom("AT+CIPMUX=0", "OK")); 007 success &= sendCom("AT+CIPSTART=\"UDP\",\"192.168.4.
-
funkcja configUDP() . Tam wykonuje się ustawienia istotne dla transmisji. Najpierw w CIPMODE ustawia się tryb transparencji danych na0. Następnie przez CIPMUX=0 ustawia się, że dopuszczone jest tylko jedno jedyne połączenie. Decydującym poleceniem jest CIPSTART. Służy ono do nawiązania polecenia z IP 192.168.4.2, czyli Twoim komputerem, oraz PORTEM 90, który nasłuchuje program Packet Sender przez serwer UDP. Są to na razie wszystkie czynności niezbędne do nawiązania pierwszej komunikacji. 2.
-
Packet Sender pomyślnie przekazał wiadomość »Hi«. Wiadomość została zatem odebrana. Można wysłać odpowiedź korzystając ponownie z polecenia CIPSEND, czyli np: 001 AT+CIPSEND=7 002 >Hello Różnica w porównaniu z poprzednim programem znajduje się w jednym wierszu: success &= sendCom("AT+CIPSTART=\"UDP\",\"192.168.4.2 \",90,91", "OK"); Jak widać, podany został drugi port. Ten port, w tym przypadku port o numerze 91, to port, który moduł odsłuchuje czekając na nadchodzące dane.
-
odbierania przez moduł jego własnych danych. 2.3 | Sterowanie diodą LED przez UDP W programie P06_UDPLED.ino chodzi w końcu w to, aby sterować sprzętem przez protokół UDP. Ten program daje możliwość włączania i wyłączania diody LED prostymi poleceniami. Ponadto dokonuje się dalszego ustawienia komunikacji UDP, która pozwala na jednoczesne kontrolowanie sprzętu z wielu komputerów. Do tego potrzebny jest układ ukazany na poniższej ilustracji.
-
success &= sendCom("AT+CIPSTART=\"UDP\",\"192.168.4.255 \",90,91", "OK"); Tym razem bowiem zmienił się IP. Ten IP może wydawać się dziwny, ponieważ nie chodzi to o IP Twojego komputera. Jak więc dane w ogóle docierają? To, że ten IP działa, wynika z tego, że jest to szczególny adres IP a mianowicie tzw. Broadcast-IP. Broadcast można przetłumaczyć mniej więcej jako emisja, np. audycji radiowych.
-
021 sendCom("Wrong UDP Command", "OK"); 022 } 023 024 } 025 026 } } 027 } Analiza nadchodzących poleceń odbywa się w procedurze loop, która jest realizowana ciągle. Jeśli nadejdą dane z modułu (esp8266.available()), są one analizowane pod kątem obecności znaków »+IPD,«. Jeśli do tego znalezione zostanie polecenie led, poleceniem parseInt() automatycznie zapisywana jest następna liczba w zmiennejsetLed.
-
Włącznik umieszczony na D8 w sposób oszczędzający miejsce Program Program nadal analizuje nadchodzące polecenia. Dodatkowo jednak cały czas jest sprawdzany przycisk. Jeśli zostanie on naciśnięty przez użytkownika, kontroler wysyła tekst Button=1 do sieci. Wszystkie połączone z modułem urządzenia z serwerem UDP na porcie 90 mogą odebrać to polecenie. Można to ponownie sprawdzić używając Packet Sender.
-
Przebieg w Packet Sender Zmiany programu można znaleźć przede wszystkim w procedurze loop. Zwykłe zapytanie if sprawdza, czy włącznik jest wciśnięty. Jeśli tak, kontroler przekazuje komunikat Button=1 do sieci. Ponadto pojawia się komunikat debug. Pojawiająca się następnie pętla while powoduje, że nie zostanie od razu wysłany cały potok poleceń, jeśli przycisk pozostaje wciśnięty. Trzeba więc zwolnić przycisk, aby program mógł dalej działać.
-
2.5 | Czujnik analogowy W poprzednim projekcie zajmowaliśmy się przyciskiem jako najprostszą formą czujnika. Teraz jako czujnik analogowy zostanie zastosowany potencjometr w celu permanentnego wysyłania do sieci wyników pomiarów. Użyty zostanie znajdujący się w mi wtykowymi, 1 x NanoESP, 1 x zestawie potencjometr 10 kΩ. Budowa jest ornik 1 kiloom (brązowy-czarnyukazana na poniższej ilustracji.
-
wyniki pomiarów będą napływać mniej więcej raz na sekundę. Wyniki zostały odebrane przez Packet Sender. W tym programie mamy jeszcze jedną zmianę w poleceniu CIPSTART. Po pierwsze został rozszerzony adres broadcast, ponieważ nie da się przewidzieć, jaką podsieć utworzy dany router. Druga zmiana polega na dodaniu parametru, tutaj drugiego. Nowy parametr umożliwia zmianę adresu docelowego polecenia CIPSEND. Moduł nasłuchuje więc najpierw na całym obszarze rozpoczynającym się od 192.168.
-
Oznacza to, żer IP, nawet jeśli został już raz zmieniony, może ustawić się na nowy PC. Jest to też powód, dlaczego najpierw trzeba wysłać polecenie do modułu, zanim będzie można odbierać dane. Wtedy powinno być także możliwe odbieranie danych od tego komputera. Chyba że z innego komputera zostanie ponownie wysłana wiadomość do modułu. 001 boolean sendUDP(String Msg) 002 { 003 boolean success = true; 004 005 success &= sendCom("AT+CIPSEND=" + String(Msg.
-
jako klient TCP. Jest to rola, jaką odgrywa domowy komputer wobec serwera sieci web. Różnicę między TCP a UDP można ogólnie zebrać w kilku hasłach: U Połączenie jest zawiązane tylko między dokładnie dwoma urządzeniami. U Wysłane pakiety są kontrolowane pod kątem błędów w transmisji i ew. korygowane. U TCP jest stosowany przede wszystkim w internecie. U Ten protokół jest nieco wolniejszy niż UDP, ale bezpieczniejszy.
-
Host:www.example.com i dwukrotne naciśnięcie [Enter]. Wpisy należy jednak wysłać bardzo szybko po sobie. Najlepiej przygotować sobie dokument tekstowy, z którego będzie można szybko skopiować poszczególne wiersze. Jako odpowiedź nadchodzi długi tekst. Pierwsza część to odpowiedź serwera i zawiera ona kilka informacji dla przeglądarki. Tekst po to strona internetowa, która jest widoczna także po bezpośrednim otwarciu www.example.com, ale tutaj tylko w formie tekstu.
-
3.2 | Zegar internetowy Ten projekt wykorzystuje wiedzę zdobytą w poprzednich rozdziałach, aby spowodować, że NanoESP będzie samodzielnie pobierał informacje ze strony internetowej. Konkretnie program pobiera aktualną godzinę ze specjalnie utworzonej w tym celu strony i przedstawia realizowany przez bibliotekę wewnętrzny zegar pozwalający na podawanie dokładnego czasu. Czas podawany jest na szeregowym monitorze. Do budowy potrzebna jest tylko karta.
-
009 010 esp8266.println(getRequest); 011 012 if (esp8266.find("+IPD")) 013 { 014 if (esp8266.find("\r\n\r\n")) 015 { 016 xyear = esp8266.parseInt(); 017 xmonth = esp8266.parseInt(); 018 xday = esp8266.parseInt(); 019 xhour = esp8266.parseInt(); 020 xminute = esp8266.parseInt(); 021 xsecond = esp8266.
-
Do tej funkcji przekazywane są parametry adresu hosta oraz podadresu. Z tego w końcu tworzone jest zapytanie Get-Request a po nawiązaniu połączenia przekazywane do do serwera TCP strony internetowej. Odpowiedź serwera musi teraz zostać przeanalizowana. W tym celu program pomija całą część RequestHeader szukając \r\n\r\n, co znaczy tyle, że program będzie kontynuował działanie po podwójnym Carriage Return i New Line.
-
Podłączenie diody LED RGB do pinów D3, D5 i D6 Program W szkicu ponownie chodzi o sprawdzenie strony internetowej, ale tym razem jest to strona zaprogramowana specjalnie do tego projektu, która pobiera dane ze strony z prognozą pogody http://www.openweathermap.com/ . Na tej stronie dzięki wariacjom URL można uzyskać informacje o pogodzie w swoim mieście. Miasto, dla którego ma być sprawdzona pogoda, można wpisać w tekście źródłowym po City. Jako przykładu użyjemy mojego miasta rodzinnego Essen: www.temp.
-
005 006 007 if (val <= 10 & val >= -20) blue = map(val, -20, 10, 255, 0); else blue = 0; 008 009 010 if (val >= 10 & val <= 40) green = map(val, 10, 40, 255, 0); 011 else if (val >= -20 & val < 10) green = map(val, -20, 10, 0, 255); 012 else green = 0; 013 014 if (val > 10 & val <= 40) red = map(val, 10, 40, 0, 255); 015 else red = 0; 016 017 analogWrite(RED, red); 018 analogWrite(GREEN, green); 019 analogWrite(BLUE, blue); 020 } Dostosowanie jasności LED jest wykonywane w funkcji rgbTemp
-
jedno praktyczne i proste polecenie AT, którym można uruchomić to skompilowane zastosowanie serwera. Moduł zachowuje się wtedy jak serwer TCP z internetu, tylko że trzeba samemu zaprogramować wysyłanie strony internetowej. 4.1 | Serwer sieci web TCP Pierwsze kroki w zakresie serwera sieci web TCP nie wymagają dodatkowego sprzętu. Najpierw przetestujemy najważniejsze polecenia z użyciem monitora szeregowego. Program Należy tak, jak poprzednio wpisać dane WLAN i załadować program na kartę.
-
połączenie zostanie przerwane ze względu na upływ timeout. Można wysłać wiadomość do przeglądarki korzystając z wariantu znanego polecenia: AT+CIPSEND=0,7 Parametr 0 oznacza tutaj klienta, do którego ma zostać wysłana wiadomość. Jest to konieczne, ponieważ dozwolonych jest wiele połączeń i w związku z tym połączenia mogą być nawiązane także z wieloma klientami. Drugi parametr, tutaj 7, oznacza ponownie ilość wysyłanych znaków. Pojawia się > i można teraz wpisać Hallo i wysłać naciskając [Enter].
-
W ten sposób należy podłączyć baterię do konstrukcji. Program Program wysyła bardziej złożoną stronę niż w poprzedniej próbie. Ponadto można sterować diodą LED na pinie D9, jeśli po IP modułu wpisze się /LED . Wtedy zmienia się aktualny stan diody LED, stan przełącza się za każdym razem (zmiana stanu na przeciwny). Należy wpisać dane swojej sieci WLAN i załadować program. IP karty ukazuje się na monitorze szeregowym. Wtedy można otworzyć przeglądarkę i wywołać IP karty.
-
011 String webpage = "
Hello World!
Open [IP]/LED to Toggle LED on D9"; 012 013 if (sendCom("AT+CIPSEND=" + String(connectionId) + "," + String(webpage.length()), ">")) 014 { 015 sendCom(webpage,"SEND OK"); 016 sendCom("AT+CIPCLOSE=" + String(connectionId),"OK"); 017 debug("Send and Close"); 018 } 019 020 } } 021 } Do uruchomienia serwera sieci web ponownie służy prosta funkcja o nazwie configTCPServer(). Jest to dokładnie to, co wcześniej było wpisywane ręcznie.
-
Program Po załadowaniu programu można ponownie otworzyć w przeglądarce stronę internetową kontrolera. W tym celu należy wpisać IP modułu, który został podany przy starcie na szeregowym monitorze. Sama strona internetowa będzie w tej próbie zapisywana nieco inaczej niż w poprzedniej. Strona internetowa serwera sieci web W poprzedniej próbie prosta strona internetowa była zawarta w tekście źródłowym. Tym razem strona zostanie zapisana w tzw. zmiennych Progmem (Program Memory).
-
001 String createWebsite() 002 { 003 String xBuffer; 004 005 for (int i = 0; i <= sizeof(site); i++) 006 { 007 char myChar = pgm_read_byte_near(site + i); 008 xBuffer += myChar; 009 } 010 011 return xBuffer; 012 } W funkcji createWebsite() ładowana jest zawartość zmiennej Progmem i zwracana w formie ciągu. Widać wyraźnie, w jaki sposób zmienna Progmem jest ponownie ładowana z pamięci programu.
-
014 } 015 return success; 016 } Procedura loop oczekuje żądanie Request. Gdy ono nadejdzie, wywołana zostanie funkcja sendWebsite() , której jako parametr zostanie przekazany wynik funkcji createWebsite(). Na tej podstawie będzie można ustalić długość tekstu za pomocą funkcji length(). Po przekazaniu strony www połączenie zostaje zakończone poleceniem AT+CIPCLOSE. Sterowanie diodą LED jest także częścią procedury loop i nieznacznie różni się od poprzedniego schematu.
-
zamykany przez . 001
002 003 Switch LED 004 Kolejna część jest bardzo podobna i ma tylko dwa nowe elementy, mianowicie
tworzący poziomą linię na stronie www oraz
pozwalający na przejście do kolejnego wiersza.
-
URL, w tym przypadku za IP modułu, znajduje się jeszcze /?led=1. Dokładnie ten tekst jest potem w programie Arduino analizowany w ten sposób, że jest on szukany a następująca po nim liczba jest wczytywana z parseInt() i przekazywana do LED. Ta pierwsza, prosta wersja formularza umożliwia bezproblemowe i wygodne sterowanie diodą LED. Tak wygląda URL po naciśnięciu przycisku LED ON. 001
002
003 004 005 Ostatnie wiersze tekstu źródłowego HTML nie zawierają nic nowego.
-
Strona Swiss-Converter-Tool po konwersji zakończonej powodzeniem Tam należy wkleić tekst ze schowka w punkcie 2. Select Output: ustawićC/C++/PHP – StringText i UTF-8 – Unix (LF). Teraz w dolnym oknie pojawia się tekst zrozumiały dla Arduino, który można skopiować do zmiennej Progmem-Variable site . Po załadowaniu zmienionego programu z nową zmienną przy wywołaniu IP karty w przeglądarce ukaże się nowa strona www. 4.
-
Podłączenie diody LED RGB do pinów D3, D5 i D6 Program Nową stronę www można ponownie znaleźć w zmiennej Progmem site. Także w tym przypadku podgląd strony HTML jest dostępny w szkicowniku. Po ustawieniu danych WLAN i załadowaniu programu do strony internetowej serwera sieci web można dotrzeć przez IP modułu. Kolor tła i nagłówek są podobne do poprzednich. Na stronie znajduje się jednak jeden nowy element: jest to element HTML5 Color Picker. Umożliwia on wyszukanie koloru dla diody LED.
-
Wybór koloru w przeglądarce Chrome Nawet jeśli wygląd strony internetowej nie różni się znacznie od poprzedniej, to jest tu kilka elementów, które chcę bliżej opisać. Po pierwsze mamy zmianę w headerze dokumentu HTML, która dotyczy następującego wiersza: Zadaniem tego wiersza jest zapobieganie temu, żeby przeglądarka po załadowaniu strony internetowej załadowała tzw. favicon.
-
natychmiast przekazywany w przypadku dokonania zmiany. Element Color-Picker w przeglądarce Android-5.0 Dzięki temu niepotrzebny jest kolejny przycisk. 001
Wybrany kolor jest przekazywany w formie /?rgb=%23 + sześć dalszych znaków. Wyrażenie %23 mówi, że jest to liczba szesnastkowa.
-
008 int b = number & 0xFF; 009 010 analogWrite(RED, r); 011 analogWrite(GREEN, g); 012 analogWrite(BLUE, b); 013 } W funkcji strtol() tekst odebrany po %23 jest najpierw przekształcany w liczbę long a ta poprzez manipulację bitów w trzy wartości wyrażone w bajtach. One za pomocą funkcji analogWrite()- są przekazywane do diody LED RGB. 4.6 | Czujnik światła W tym projekcie strona internetowa serwera sieci web nie jest wykorzystywana jako interfejs obsługi, lecz jako element komunikowania.
-
Program Do tej pory strony internetowe serwera sieci web składały się zawsze z niezmiennej strony wysyłającej dane do kontrolera. Teraz strona internetowa ma zostać zmieniona przed przeniesieniem do przeglądarki, aby ukazać zmierzoną jasność fototranzystora. Będzie to działać, ponieważ w kodzie źródłowym strony internetowej ukryty jest znak wieloznaczny. Podczas ładowania danych ze zmiennej Progmem program zastępuje znak wieloznaczny *bright* aktualną wartością jasności.
-
Element suwaka range jako value otrzymuje wartość *bright* , która właściwie nie jest wartością poprawną, ale poźniej jest przez taką zastępowana. Maksymalna wartość range wynosi 1024 i została tym samym dopasowana do 10-bitowego zakresu ADC kontrolera. Przed przekazaniem strony internetowej należy teraz tylko zadbać, że w tekście źródłowym znak wieloznaczny *bright* została zastąpiony poprawną wartością.
-
mi wtykowymi, 1 x NanoESP, 1 x x dioda LED, drut sterujący długich przewodów masowych na zewnątrz karty, lecz do wyjścia cyfrowego. Tylko, gdy te piny są w ustawieniu low, diody mogą świecić. Podłączenie diod LED do D2-D7 Uwaga! Diody LED nie mogą być podłączane bez oporników wstępnych. W tym przypadku jest to dopuszczalne ze względu na opory On wewnętrznych FET portów o wartości ok. 30 omów.
-
Strona internetowa GPIO-Control W tym kodzie HTML strona internetowa pełni rolę zarówno formularza do wypełnienia oraz elementu podającego informacje. Gdy spojrzymy na element formuły, widać że wykorzystywany jest tam szereg elementów wpisu typu checkbox. Zostają im przypisane indywidualne nazwy wynikające z nazw pinów. Funkcję znaku wieloznacznego w tekście pełni tekst *checkedX*. Gdy pin jest low, znak wieloznaczny zostaje usunięty.
-
zaznaczono pola wyboru 3, 5 i 7. Wtedy URL zmienia się na: [IP]/?ld3=on&ld5=on&ld7=on Oznacza to, że przekazane zostają tylko zaznaczone pola wyboru i można je zidentyfikować na podstawie indeksu. W procedurze loop odbywa się to w taki sam sposób. Najpierw cały port D, do którego podłączone są wyjścia cyfrowe, jest ustawiany na low. Następnie pętla while wyszukuje wszystkie »ld« w linku do zasobów. Na podstawie znalezionych ld, w ld3 byłoby to np.
-
004 005 for (int i = 0; i <= sizeof(site); i++) 006 { 007 char myChar = pgm_read_byte_near(site + i); 008 xBuffer += myChar; 009 } 010 011 for (int x = 2; x <= 7; x++) 012 { 013 if (PORTD & (1 << x)) 014 { 015 xBuffer.replace("*checked" + String(x) + "*", "checked"); 016 } 017 else 018 { 019 xBuffer.
-
strony zmniejszenie kodu źródłowego pliku HTML oraz ewentualnie optymalizację operacji string. Wspomniana wyżej biblioteka może pomóc przy poszukiwaniu błędów. 4.8 | Dygresja: Dostęp do karty z internetu Wiele z przedstawionych tutaj prób to praktyczne rozwiązania do sterowania kartą w ramach własnej sieci domowej. Jednakże bardzo przydatna może być możliwość dostępu do karty z większej odległości. Można by np. podczas urlopy włączać światła w domu, żeby odstraszyć włamywaczy.
-
Poprawne ustawienia w Fritz!Box Ustawienia w routerze zostały wyjaśnione i można przejść do pierwszej próby. Do tego potrzebny jest IP< ale nie IP karty w lokalnej sieci, lecz Wasz globalny IP. Można to sprawdzić na stronie http://www.meine-aktuelle-ip.de/ . Po wpisaniu w przeglądarce podanego na tej stronie IP powinna pojawić się strona internetowa modułu. Tym razem jednak wybraliśmy długą drogę przez internet.
-
Strona internetowa AnyDns.info Najpierw trzeba zalogować się na stronie internetowej i już wpisać nazwę domeny. Wybrałem nazwę nanoesp oraz hosta dynpc.net. Po zalogowaniu pojawia się domena: http://nanoesp.dynpc.net/ Teraz usługa musi otrzymać jeszcze Wasze IP. Wpisać usługę do routera, aby nowy IP został przekazany dalej bezpośrednio do usługi DDNS. W Fritz!Box musiałem kliknąć najpierw na dole na Ansicht: Erweitert , aby wyświetlone zostały wszystkie opcje.
-
Ustawienia w Fritz!Box umożliwiające korzystanie z Dynamic DNS Kilka słów tytułem ostrzeżenia: Usługa dynamicznego DNS jest wprawdzie bardzo praktyczna, ale należy zachować ostrożność przy podawaniu nazwy domeny. Narażacie się na atak, ponieważ teraz do zaatakowania routera hakerowi wystarczy tylko nazwa domeny i nie musi znać aktualnego IP. Dlatego opisaną wyżej stronę pozostawię w sieci tylko do celów testowych. THINGSPEAK Ostatni rozdział dotyczy całkiem nowego tematu a mianowicie platformy ThingSpeak.
-
konto na stronie www.ThingSpeak.com . Należy zalogować się podając swoje dane użytkownika w punkcie Sign In . Pojawia się strona przedstawiająca Wasze Channels (kanały). Ponieważ nie macie jeszcze kanałów, jest ona dość pusta. Należy kliknąć na New Channel i wybrać nazwę, np. Light, ponieważ w tym projekcie będziemy mierzyli jasność. W punkcie Field 1 można dodatkowo ustawić nazwę pola, np. Brightness. Pozostałe pola zostawiamy na razie puste.
-
Kliknąć na Save Channel, aby zapisać ustawienia. Teraz następuje przejście na stronę Waszych kanałów, na której na razie znajduje się pusty diagram. W górnej zakładce należy kliknąć na API Keys. Ciąg liczb i liter podany w punkcie Write API Key będzie wkrótce potrzebny. Konstrukcja do tej próby obejmuje czujnik na wejściu analogowym A6. Dzielnik napięcia z opornikiem 10 kΩ i fototranzystor umożliwiają pomiar aktualnej jasności. Można także zastosować czujnik temperatury.
-
Wyniki pomiarów w formie wykresu Wydaje się, że tekst źródłowy znacznie różni się od wszystkich poprzednich programów. Jednakże chodzi tutaj głównie o zestawienie znanych już elementów. Zmienna Progmem zwiera żądanie HTTP, które musi być wysłane do strony ThingSpeak oraz kilka znaków wieloznacznych, które muszą zostać zamienione w zależności od potrzeb. 001 POST *URL* HTTP/1.1 002 Host: api.thingspeak.
-
teraz z Waszego klucza AP, pola do wypełnienia oraz wartości. Długość wiadomości można w prosty sposób ustalić na podstawie długości ciągu znaków. W całości przykładowy POST wygląda następująco: 001 POST /update HTTP/1.1 002 Host: api.thingspeak.com 003 Connection: close 004 Content-Type: application/x-www-form-urlencoded 005 Content-Length: 35 006 007 api_key=GXE93O4WF03Q3X8I&field1=954 Na podstawie klucza API strona internetowa może jednoznacznie zidentyfikować użytkownika i kanał i wpisuje wartości.
-
Konstrukcja próby z diodą LED na pinie D9 Program Obok przygotowania sprzętu konieczne jest także wykonanie kilku czynności na stronie ThingSpeak. Po kliknięciu na stronie internetowej w najwyższym menu na Apps wyświetla się szereg różnych aplikacji. W tym przypadku zajmiemy się aplikacją ThingHTTP. Po kliknięciu na odpowiedni przycisk najpierw pojawia się raczej pusty interfejs. Kliknąć na New ThingHTTP. W wyświetlonym formularzu należy wpisać: Name: Twitch URL: https://api.twitch.
-
wartości. Tę wartość można później w prosty sposób w programie wywołać i przeanalizować funkcją getThingSpeakHttp(). 5.3 | Instalacja alarmowa Twitter Ten projekt dotyczy instalacji alarmowej, za pomocą której można np. sprawdzić, czy ktoś nieuprawniony nie otworzył szuflady. Instalacja na bieżąco sprawdza, czy na podłączony czujnik światła nie pada światło o ustalonej jasności. Jeśli tak, rozlega się dźwięk alarmu i jednocześnie zostaje wysłana informacja przez Twittera.
-
500. Jeśli tak, zostanie wysłana wiadomość przez Twittera i rozlegnie się alarm. Będzie on trwał tak długo, aż jasność ponownie spadnie poniżej 500. Aktualnie zmierzone wartości jasności można śledzić na szeregowym monitorze. Do pierwszych testów zalecam zakrycie czujnika światła, aby alarm nie uruchomił się za szybko. Nowa funkcja w tym projekcie nazywa się sendTwitterPost(). Jako parametr należy jedynie wpisać TwitterKEY i podać wiadomość.
-
utworzony już kanał Light z pierwszej próby ThingSpeak lub inny własny kanał. Wtedy wszystkie polecenia są protokołowane. Istotny jest jednak przede wszystkim klucz API, który jest wpisywany w #define TalkBackKEY . Tym razem dodatkowo oprócz klucza API potrzebny jest także ID, który można znaleźć w podglądzie pod TalkBack ID po kliknięciu na Save TalkBack. Ten ID należy wpisać po #define TalkBackID do programu. Po załadowaniu programu i otwarciu szeregowego monitora pojawi się najpierw komunikat No Command.
-
OpenDoor lub CloseDoor i w ten sposób sterować modelem. Kartą można sterować także z różnych innych źródeł poprzez polecenia TalkBack. W tekście źródłowym funkcja getTalkBackCom() przejmuje zadania sprawdzania nowych poleceń. Gdy coś zostanie znalezione. polecenie jest zwracane. Trzeba podać jedynie parametry key i id . 5.5 | Cheerlights Ta próba opiera się na projekcie Hansa Scharlera o nazwie Cheerlights.
-
Strona Cheerlights z aktualnym kolorem liliowym Do programu niezbędna jest poza tym Crossfade-Library Radka Wierzbickiego (źródło: https://github.com/radekw/Arduino/tree/5f24ce7c8db9dfbb5252b59824c3217d851 b3a3c). Ze względów praktycznych kopia używanej wersji Library znajduje się w folderze szkicu. Musi ona zostać skopiowana do folderu libraries Twojego szkicownika.
-
Możliwy tweet może wyglądać np. tak: Testing my #cheerlights project on my #NanoESP with the color blue #ThingSpeak #IoT I w ten sposób nadaje się całemu światu nowy kolor. Sprawdzanie aktualnego koloru odbywa się przy użyciu funkcji getCheerlightColor() . Jako parametry podaje się hosta, czyli api.thingssspeak.com, oraz URL, tutaj /channels/1417/field/1/last.txt. Jest to więc proste sprawdzenie klienta TCP znanego rodzaju.
-
Układ projektu czujnika pożaru Program Program musi połączyć ze sobą wiele różnych elementów. Duże znaczenie ma tutaj ponownie strona ThingSpeak. M .in. także tutaj aplikacja ThingSpeak będzie zajmować się monitorowaniem wartości progowej NTC. Z tego miejsca będą także realizowane alarmy a mianowicie będzie wysyłana wiadomość na Twottera oraz będzie wprowadzane polecenie TalkBack, które będzie wyzwalać alarm na kontrolerze. W pierwszym rzędzie należy na stronie ThingSpeak utworzyć nowy kanał.
-
dodatkowych. Te jednak nie są wykonywane w programie, lecz na stronie ThingSpeak. W tym celu należy przejść do Apps i następnie wybrać React . Poprzez React można zareagować na określone zdarzenia.
-
Można także ustawić czasowe sterowanie alarmem. W tym celu w Apps należy kliknąć na TimeControl i utworzyć nowy element, np. o nazwie AlarmClock. Tam należy dokonać następujących ustawień: Name: Presents Frequency: One Time Time Zone: Berlin Run At: 2015-24-12 7:00 am Fuzzy Time: ± 0 minutes TalkBack: Alarms, add command: Alarm Poprawne ustawienia TalkBack dla alarmu pożarowego Do pierwszego testu zaleca się wybranie czasu za kilka minut. Jeśli zadziała, można ustawić poprawny czas.
-
ZAŁĄCZNIK Polecenia AT Polecenie Pisownia Podstawowe informacje Polecenie testowe AT Reset AT+RST Informacje o firmware AT+GMR Echo wł./wył.
-
Zmiana adresu MAC stacji AT+CIPSTAMAC= Ustawianie adresu IP (stacja) AT+CIPSTA= Ustawianie adresu IP (punkt dostępu) AT+CIPAP= Uruchomienie SmartConfig AT+CWSTARTSMART= Zatrzymanie SmartConfig AT+CWSTOPSMART Komunikacja Funkcja ping AT+PING= Zezwolenie na wiele połączeń AT+CIPMUX= Tryb danych (0=transparentny, 1=tryb danych) AT+CIPMODE= Struktura odebranych danych +IPD,,: Nawiązanie połączenia AT+CIPSTART=««,««, Wysła
-
Pinout