logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Moduły Wi-Fi Atmel WINC1500 dedykowane dla aplikacji IoT cz. III.

TechEkspert 19 Cze 2015 15:55 2715 4
REKLAMA
MediaMarkt Black Week
  • Moduły Wi-Fi Atmel WINC1500 dedykowane dla aplikacji IoT cz. III.
    Moduły Wi-Fi Atmel WINC1500 dedykowane dla aplikacji IoT cz. III.

    W poprzednim odcinku WINC1500 Cz. II udało się przesłać dane z wykorzystaniem modułu WiFi WINC1500 do smartfona za pośrednictwem AP. W tej części wyślemy dane przez internet a następnie za pośrednictwem przeglądarki internetowej będziemy obserwować przesłane informacje.

    Atmel wraz z PubNub przygotował demo obserwacji temperatury w czasie rzeczywistym: WINC1500 połączony z pubnub. Kod przykładu dla zestawu Atmel Xplained Pro można pobrać tutaj: http://pubnub.com/blog/wp-content/uploads/2015/05/code-1.zip

    Przygotowany przykład poza płytką mikrokontrolera ATSAMD21-XPRO, modułem WiFi ATWINC1500, czujnikiem temperatury I/O1 Xplained Pro, wykorzystuje także moduł OLED 1 Xplained Pro. Ponieważ moduł OLED nie jest dostępny w testowanym zestawie, wyłączymy funkcje obsługi wyświetlacza.

    Po skompilowaniu projektu w Atmel Studio 6.2 będziemy przesyłać dane poprzez WiFi do serwerów PubNub, przy pomocy przykładowego projektu https://github.com/pubnub/atmel-temperature-demo wyświetlimy przesłane dane z wykorzystaniem przeglądarki internetowej (zalecana przeglądarka Google Chrome, jednak inne przeglądarki również działają poprawnie).

    Po ściągnięciu przykładu (WINC1500+PubNub), jeżeli w zestawie nie mamy wyświetlacza oled, możemy zrezygnować z linijek w main.c:
    // ssd1306_init();
    // ssd1306_clear();
    oraz kodu który wyświetla poziom oświetlenia i temperaturę:
    //display_temperature( (uint8_t)temperature );
    //display_light( light );
    a także wyświetlanie komunikatów przesłanych z PubNub.
    //display_received_data( (char*)msg );

    Projekt wykorzystuje skalę Fahrenheita, zakomentujmy przeliczenie:
    //double tempf = (temperature*(9/5))+32;
    oraz dodajmy bezpośrednie przekazywanie temperatury w stopniach Celsiusza:
    double tempf = temperature;

    Po założeniu konta na PubNub, odczytujemy wartości Publish Key, Subscribe Key dla utworzonego kanału Atmel_Pubnub, dane dostępne są na https://admin.pubnub.com po zalogowaniu. Wraz z plikami projektu dostępne jest oprogramowanie do aktualizacji firmware modułu Atmela, jeżeli firmware nie jest aktualny możemy podnieść jego wersję.

    Do złącza EXT1 podłączamy moduł WINC1500, do EXT2 czujnik temperatury i oświetlenia, do EXT3 moduł OLED (jeżeli posiadamy).

    W pliku main.h wpisujemy dane umożliwiające połączenie z punktem dostępowym będącym w zasięgu modułu WINC1500:
    #define TEST_MODE_SSID "nazwa_SSID"
    #define TEST_MODE_PASSWORD "hasło_dostępwe"

    W pliku main.c dodajemy dane autoryzacyjne odczytane https://admin.pubnub.com po zalogowaniu, oraz utworzeniu kanału Atmel_Pubnub
    static const char pubkey[] = "tutaj wpisujemy Publish Key";
    static const char subkey[] = "tutaj wpisujemy Subscribe Key";
    static const char channel[] = "Atmel_Pubnub";

    Po skompilowaniu, oraz uruchomieniu projektu warto uruchomić konsolę emulowanego portu szeregowego aby zobaczyć komunikaty wysyłane przez program. Na stronie https://admin.pubnub.com klikamy po prawej stronie Debug Console zobaczymy tam komunikaty docierające przez internet z modułu WINC1500 do serwerów PubNub. Jeżeli wszystko działa poprawnie na stronie http://www.pubnub.com/console/ powinniśmy zobaczyć w oknie komunikatów wpisy w formie:
    {“columns”:[["temperature","23.00"]]}

    Moduły Wi-Fi Atmel WINC1500 dedykowane dla aplikacji IoT cz. III.

    Korzystając z projektu https://github.com/pubnub/atmel-temperature-demo możemy obserwować dane docierające do serwerów PubNub z naszej platformy testowej. W plikach .js zmieniamy wartości:
    subscribe_key:
    publish_key:
    na odczytane z https://admin.pubnub.com

    Po uruchomieniu index.html na komputerze posiadającym dostęp do internetu, zobaczmy dane z czujnika temperatury docierające do pubnub w czasie rzeczywistym. W plikach js możemy przeliczyć wartości ze skali Fahrenheita na skalę Celsiusza aby aplikacja zachowywała się zgodnie z założeniami autorki.

    Moduły Wi-Fi Atmel WINC1500 dedykowane dla aplikacji IoT cz. III.

    Serwis pubnub.com dostarcza wiele innych płatnych opcji takich jak możliwość zapisywania odbieranych danych, szyfrowania transmisji, oraz obsługi większej ilości urządzeń i komunikatów.

    Sprawdźmy czy możemy łatwo przystosować dostarczony kod aby wykorzystać projekt do połączenia z serwisem https://thingspeak.com , również dedykowanym m.in dla rozwiązań IoT. Po założeniu konta na thingspeak.com tworzymy nowy kanał oraz ustawiamy dwa pola dla temperatury i poziomu oświetlenia:

    Moduły Wi-Fi Atmel WINC1500 dedykowane dla aplikacji IoT cz. III.

    Przy okazji zaglądamy do API Keys i zapisujemy swój klucz.

    W pliku pubnub.h zmieniamy:
    #define PUBNUB_ORIGIN "pubsub.pubnub.com"
    na
    #define PUBNUB_ORIGIN "api.thingspeak.com"
    aby połączyć się z serwisem thingspeak.com.
    oraz dodajemy:
    bool thingspeak_publish(pubnub_t *pb, const char *message);
    będzie to nowa funkcja wysyłająca dane o temperaturze oraz poziomie oświetlenia.

    W pliku pubnub.c tworzymy nową funkcję thingspeak_publish na bazie pubnub_publish:

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Aby dane trafiały do thingspeak należy otwierać url z wartością klucza oraz parametrami dot. temperatury oraz oświetlenia, przykładowo:
    http://api.thingspeak.com/update?key=tutaj_twój_klucz_thingspeak&field1=25.0&field2=15

    25.0 to przykładowa wartość temperatury, natomiast 15 przykładowa wartość oświetlenia. Testowo możemy otworzyć url w przeglądarce aby sprawdzić czy widzimy aktualizacje na thingspeak.com.

    W pliku main.c wpisujemy swój API Key z thingspeak.com:
    static const char pubkey[] = "tutaj_twój_klucz_thingspeak";

    rezygnujemy z linijki:
    //sprintf(buf, "{\"columns\":[[\"temperature\", \"%d.%d\"]]}", (int)tempf, (int)((int)(tempf * 100) % 100));

    zastępując ją:
    sprintf(buf, "&field1=%d.%d&field2=%d", (int)tempf, (int)((int)(tempf * 100) % 100), light );
    w ten sposób utworzymy odpowiedni url (query string) przekazujący dane do serwisu thingspeak.com.

    Rezygnujemy z linijki:
    //pubnub_publish(m_pb, channel, buf);
    zastępując ją:
    thingspeak_publish(m_pb, buf);
    wywołującą nową funkcję wysyłającą dane.

    Rezygnujemy także z:
    //printf("pubnubDemo: subscribe event.\r\n");
    //pubnub_subscribe(m_pb, r21_channel);
    gdyż w tej prostej próbie będziemy tylko wysyłali dane.

    Zmieńmy warunek sterujący maszyną stanów:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    na:
    if(m_pb->trans == PBTT_NONE || m_pb->trans == PBTT_PUBLISH) {
    będziemy wykonywać kolejne cykle publikacji danych.

    Zobaczmy, czy w tak prymitywny sposób udało się przystosować kod wysyłający dane na serwery pubnub.com do komunikacji z https://thingspeak.com.

    Obserwując komunikaty wysyłane portem szeregowym debugera wszystko wygląda dobrze, aby podejrzeć wysyłane komunikaty można zdjąć komentarz z linii:
    printf("buf = %s", buf);
    w pliku pubnub.c w funkcji static void handle_transaction(pubnub_t *pb).

    Już po chwili możemy obserwować dane napływające do serwisu thingspeak.com, po dłuższym zbieraniu komunikatów możemy zaobserwować długotrwałe zmiany temperatury i oświetlenia:

    Moduły Wi-Fi Atmel WINC1500 dedykowane dla aplikacji IoT cz. III.

    Warto zajrzeć do ustawień wykresów, możemy zmienić zarówno sposób prezentacji danych, jak również dodać funkcje matematyczne (średnia z określonej liczby próbek, sumowanie wartości itp.).

    Materiał przygotowany we współpracy z firmą JM elektronik.

    Fajne? Ranking DIY
    O autorze
    TechEkspert
    Redaktor
    Offline 
    W moich materiałach znajdziecie testy i prezentacje sprzętu elektronicznego, modułów, sprzętu pomiarowego, eksperymenty. Interesuje mnie elektronika cyfrowa, cyfrowe przetwarzanie sygnałów, transmisje cyfrowe przewodowe i bezprzewodowe, kryptografia, IT a szczególnie LAN/WAN i systemy przechowywania i przetwarzania danych.
    Specjalizuje się w: mikrokontrolery, rozwiązania it
    TechEkspert napisał 5819 postów o ocenie 4623, pomógł 15 razy. Jest z nami od 2014 roku.
  • REKLAMA
    MediaMarkt Black Week
  • #2 14995362
    mukeshtalks
    Poziom 2  
    Thanks for nice tutorial
  • REKLAMA
    MediaMarkt Black Week
  • #3 15000421
    TechEkspert
    Redaktor
    You're welcome.
    Is google translate translated the tutorial well?

    What is your idea to use WINC1500?
  • #4 15000774
    mukeshtalks
    Poziom 2  
    Hi,

    Thanks for reply. Quick feedback on the English translation
    1. Code snippets were having problem.
    2. Otherwise English translations was OK.
    3. It can be more user friendly and understandable by newbies if the complete tutorial could have be defined in steps nicely.
    4. did you also tried the data reception from Thingspeak to apply actions.
    5. My idea is to integrate this with My Solar Invert + Charger and monitor the power generation and system analysis.

    If you need any support from me feel free to contact on my email kumar.mukesh(_at_)hotmail.com

    Regards,

    Mukesh Kumar
  • #5 15001976
    TechEkspert
    Redaktor
    Thank you for suggestions, we not tested receive data from Thingspeak.
    PV monitoring is interesting and popular topic.

    You can present your projects on DIY section:
    https://www.elektroda.pl/rtvforum/forum85.html
    or english section:
    https://www.elektroda.pl/rtvforum/forum385.html
REKLAMA