Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

ESP8266 / Bascom - aktualizacja danych na Thingspeak

Elektronik_Kraków 11 Sty 2016 00:23 2967 18
  • #1 11 Sty 2016 00:23
    Elektronik_Kraków
    Poziom 13  

    Witam
    Próbuję wysyłać dane do bazy Thingspeak.

    Zmienne:

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    Konfiguracja:
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    Wysyłanie:
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    Ręcznie przez stronę działa OK, ale przez ESP8266 nic się nie dodaje.
    Chyba to, że próbuję wysłać na dwa kanały ( oczywiście po kolei ) nie ma wpływu ?
    Jakieś pomysły ?

    Najlepiej byłoby sprawdzać błędy, ale coś z odbiorem z ESP8266 mam nie tak, bo nie mogę "wyciągnąć" adresu IP, który dostaje moduł.

    Odbieram z UART tak:
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

  • #2 11 Sty 2016 08:09
    piterek-23
    Poziom 30  

    Elektronik_Kraków napisał:
    Najlepiej byłoby sprawdzać błędy, ale coś z odbiorem z ESP8266 mam nie tak, bo nie mogę "wyciągnąć" adresu IP, który dostaje moduł.

    A ESP w ogóle łączy się z WiFi?
    W routerze go widzisz?

  • #3 11 Sty 2016 12:20
    Elektronik_Kraków
    Poziom 13  

    Tak, na routerze jest
    Nawet podpiąłem się FT232 najpierw do Tx atmega a potem do Rx, żeby sprawdzić co nadaje. Miałem między innymi
    STA:"192.168.0.120" oraz adres Mac modułu.

    Niepokoi mnie natomiast składnia, jaką się wysyła do Thingspeak'a. Po zalogowaniu w zakładce Data Import/Export jest przykład

    Code:

    GET https://api.thingspeak.com/update?api_key=NB9OW9K1234567BF&field1=0

    lub
    Code:

    GET http://api.thingspeak.com/update?api_key=NB9OW9K1234567BF&field1=0

    natomiast niektórzy piszą tak
    Code:

    GET /update?key=WM82DJMQF003MYGU&field1=8


    natomiast znalazłem jeszcze takie informacje:
    przed pierwszym Field1 nie powinno być znaku "&"
    Code:

    Thing_string = "GET https://api.thingspeak.com/update?api_key=" + Apikey + "&Field1=" + T1 + "&Field2=" + T7 + "&Field3=" + T3 + "&Field4=" + Str(hum) + "&Field5=" + Str(pressure) + Chr(13) + Chr(10) + Chr(13) + Chr(10)

    oraz, że " Chr(13) + Chr(10) + Chr(13) + Chr(10)" też jest niepotrzebne

    a jeśli chodzi o
    Cytat:
    Najlepiej byłoby sprawdzać błędy, ale coś z odbiorem z ESP8266 mam nie tak, bo nie mogę "wyciągnąć" adresu IP, który dostaje moduł.


    to raczej chodziło mi o jakieś problemy z konfiguracją UART
    na skonfigurowany
    bufor = 245
    bytematch = 10

    Dodano po 45 [minuty]:

    Niestety na razie mam problem z odbiorem więcej niż, jednej linii. Stąd problem, żeby dobrze obsłużyć moduł ESP.

    Może Kolega lub ktoś z czytających "rozjaśni" mi trochę ?
    Chodzi o użycie Bytematch
    Załóżmy, że mam
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    to jeśli będzie np 4 linie danych powiedzmy po 50 znaków, każda zakończona znakiem 13, to zostaną one umieszczone w kolejności nadejścia i teraz ja standardowo używam
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    to wtedy mam to odebrać
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    czy może

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

    przy czym ciag1_uart będzie miał taki sam rozmiar jak bufor - 254 i dalej sam muszę podzielić go na cztery części parsując znakiem 13 ?

  • #4 11 Sty 2016 14:24
    373522
    Usunięty  
  • #5 11 Sty 2016 16:00
    Elektronik_Kraków
    Poziom 13  

    Witam
    Jeśli chodzi o to co knuje :D ( tzn. jak ma działać ).
    Najpierw chciał stawiać webserwer, ale poległem na dobrej obsłudze odczytu kilku linii ( wykrycie kilku znaków, które uruchomią podprogram wysyłania na serwer ). Więc na początek coś prostszego, ale też widzę, że bez dobrej obsługi odczytu kilku linii będzie kulało.

    Wracając do tematu

    Cytat:

    Kiedy włączysz odbieranie znaków do bufora to odbierane są "w tle" w "ukrytej" obsłudze przerwania.

    to wiedziałem

    Cytat:

    Teraz o tym że w buforze czekają znaki możesz się dowiedzieć albo testując funkcją Ischarwaiting() albo ustawiając trigger na jakiś konkretny znak własnie poprzez Bytematch

    czyli znak 13 spowoduje np. ustawienie flagi i odczytanie np. przez Input zawartości bufora. Czyli powinienem szybko sprawdzić, czy jest tam coś interesującego bo zaraz nadejdzie kolejne ( np. ESP w trybie serwera potrafi wysłać osiem linii ) ?

    Może głupie pytanie, ale czy program atmega "zdąży" przy 115200 ?

    Ostatecznie:
    Bufor = 254
    Bytematch = 13

    1 linia zakończona znakiem 13
    Input ciag_uart Noecho
    parsowanie
    2 linia zakończona znakiem 13
    Input ciag_uart Noecho
    parsowanie
    3 linia zakończona znakiem 13
    Input ciag_uart Noecho
    parsowanie
    4 linia zakończona znakiem 13
    Input ciag_uart Noecho
    parsowanie

    I jeszcze mam pytanie odnośnie Input - wyczytałem, że automatycznie kasuje zawartość bufora, nie trzeba robić Clearin0 - czy to prawda ?

    znalazłem ten temat - dziękuję. Jest tam co prawda użyty Inkey, ale daje nieco co myślenia

    Dodano po 29 [minuty]:

    Jeśli chodzi ESP8266 to terminal pokazuje:

    Code:

    AT+RST


    OK
    WIFI DISCONNECT

     ets Jan  8 2013,rst cause:2, boot mode:(3,7)

    load 0x40100000, len 1396, room 16
    tail 4
    chksum 0x89
    load 0x3ffe8000, len 776, room 4
    tail 4
    chksum 0xe8
    load 0x3ffe8308, len 540, room 4
    tail 8
    chksum 0xc0
    csum 0xc0

    2nd boot version : 1.4(b1)
      SPI Speed      : 40MHz
      SPI Mode       : QIO
      SPI Flash Size & Map: 8Mbit(512KB+512KB)
    jump to run user1 @ 1000

    ŚŐ(¤SQS(RQ¨)HT¨)SHHHC…ä˙rŽĂąô
    Ai-Thinker Technology Co. Ltd.

    ready
    AT+CWMODE=1


    OK
    AT+CWJAP="nigsdfdsf","qasdfgdfefd"

    WIFI CONNECTED
    WIFI GOT IP

    OK
    AT+CIFSR

    +CIFSR:STAIP,"192.168.0.100"
    +CIFSR:STAMAC,"5c:cf:7f:01:be:a8"

    OK
    AT+CIPMUX=1


    OK
    AT+CIPSTART=4,"TCP","184.106.153.149",80

    4,CONNECT

    OK
    AT+CIPSTART=4,119

    Link typ ERROR

    ERROR
    GET http://api.thingspeak.com/update?api_key=NB9O19K734GERRA4BF&Field1=34.5&Field2=47.5&Field3=48.3&Field4=52&Field5=1002


    ERROR
    AT+CIPCLOSE

    MUX=1

    ERROR
    AT+CIPSTART=4,"TCP","184.106.153.149",80

    ALREADY CONNECTED

    ERROR
    AT+CIPSTART=4,121

    Link typ ERROR

    ERROR
    GET http://api.thingspeak.com/update?api_key=D6GBHJ335G6RVXQI&Field1=54.6&Field2=49.3&Field3=23.6&Field4=34.5&Field5=34.8


    ERROR
    AT+CIPCLOSE

    MUX=1

    ERROR


  • #6 12 Sty 2016 16:01
    Elektronik_Kraków
    Poziom 13  

    Błąd był w kodzie zamiast CIPSEND miałem CIPSTART.

    Teraz wysyła OK ( tzn. mam dwa razy SEND OK ), ale mam Bad Request:

    Code:

    AT+CIPMUX=1


    OK
    AT+CIPSTART=4,"TCP","184.106.153.149",80

    4,CONNECT

    OK
    AT+CIPSEND=4,120


    OK
    >

    busy s...

    Recv 120 bytes

    SEND OK
    AT+CIPSEND=4,118


    OK
    >

    busy s...

    Recv 118 bytes

    SEND OK

    +IPD,4,323:HTTP/1.1 400 Bad Request
    Server: nginx/1.7.5
    Date: Tue, 12 Jan 2016 14:25:38 GMT
    Content-Type: text/html
    Content-Length: 172
    Connection: close

    <html>
    <head><title>400 Bad Request</title></head>
    <body bgcolor="white">
    <center><h1>400 Bad Request</h1></center>
    <hr><center>nginx/1.7.5</center>
    </body>
    </html>
    4,CLOSED
    AT+CIPCLOSE

    MUX=1

    ERROR


    W czym jest problem ?

    Teraz wysyłam tak:
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    Dodano po 20 [minuty]:

    Zmieniłem na każdorazowe połączenie przed wysłaniem.

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    i teraz ThingSpeak pokazuje, że dodano pozycję, ale nic nie widać na wykresie.

    Dodano po 9 [minuty]:

    Zrobiłem eksport do CSV i mam:

    created_at entry_id field1 field2 field3 field4 field5
    2016-01-10 22:58:06 UTC 1 0 27.9 58.4 34
    2016-01-10 22:59:27 UTC 2 0.1 27.5 57.9 34 986
    2016-01-10 23:00:26 UTC 3 -0.4 26.5 55.8 34 984
    2016-01-11 18:56:31 UTC 4 2.1 26.5 55.8 34 984
    2016-01-11 22:25:50 UTC 5 2.1 26.5 55.8 34 984
    2016-01-11 22:51:56 UTC 6 2.1 26.5 55.8 34 984
    2016-01-12 14:37:00 UTC 7
    2016-01-12 14:37:32 UTC 8
    2016-01-12 14:37:48 UTC 9
    2016-01-12 14:38:05 UTC 10
    2016-01-12 14:39:39 UTC 11
    2016-01-12 14:43:36 UTC 12
    2016-01-12 14:53:44 UTC 13
    2016-01-12 14:55:47 UTC 14
    2016-01-12 14:58:32 UTC 15
    2016-01-12 14:59:02 UTC 16

  • #7 12 Sty 2016 16:23
    373522
    Usunięty  
  • #8 15 Sty 2016 14:46
    373522
    Usunięty  
  • #9 15 Sty 2016 15:47
    piterek-23
    Poziom 30  

    Kolego @niveasoft pytanie troszkę z innej beczki... Skąd masz takie ładne linie łączące funkcje w BASCOMie?

  • #10 15 Sty 2016 16:03
    373522
    Usunięty  
  • #11 19 Sty 2016 11:14
    Elektronik_Kraków
    Poziom 13  

    Dziękuję Koledze niveasoft za odpowiedź - będę testował rozwiązanie Kolegi. Trochę się bałem tego Inkey, bo ono mi zawsze coś blokowało, ale skoro jest informacja, że nie blokuje niczego to sama radość.
    Odnośnie mojego problemu, to wyszły dwie rzeczy:

    Code:

    Thing_string = "GET https://api.thingspeak.com/update?api_key=" + Apikey + "&Field1=" + T1 + "&Field2=" + T7 + "&Field3=" + T3 + "&Field4=" + Str(hum) + "&Field5=" + Str(pressure) + Chr(13) + Chr(10)


    nazwa pola "&field1=" ma być małymi literami, czyli "&field1="

    a druga rzecz, to niestety zasięg WiFi, okazał się gorszy niż zakładałem, ale zamówiłem już antenę 12dBi, więc może da radę. Być może to nie do końca wina modułu, mam taki mały repeater wkładany do gniazdka, ale jest bez anteny.

    Spotkałem się też z opiniami, że prędkość 115200 jest trochę za duża ( niestety nie da się zmienić na stałe na inna ), ale widzę, że Kolega takiej używa.
    Czy taktowanie kontrolera ( u mnie 8 MHz ) może wpłynąć na działanie odczytu z UART ?

  • #12 19 Sty 2016 12:26
    373522
    Usunięty  
  • #13 19 Sty 2016 14:02
    Elektronik_Kraków
    Poziom 13  

    Dziękuję za odpowiedź.
    Jako, że ma nigdzie wait'ów, chciałem zapytać jak Kolega zrobił konfigurację ESP8266 ?
    Ja to na razie robię na wait'ach niestety.

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    Zastanawiałem się, czy można by tego zrobić z użyciem Timer'a:

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    Ewentualnie może z użyciem Case, sprawdzając, czy na UART przyszło OK Error, czy ready.

  • #14 19 Sty 2016 14:19
    373522
    Usunięty  
  • #15 19 Sty 2016 16:01
    Elektronik_Kraków
    Poziom 13  

    Cytat:
    Po co ciągle konfigurować tego ESP?
    Mojego skonfigurowałem raz. Teraz jak podłaczę do niego terminal to po włączeniu/resecie sam loguje sie do mojego routera.
    Sam pisze, że WIFI CONNECTED i WIFI GOT IP


    Czyli dokąd nie zmieni się sieci WiFi to nie trzeba konfigurować, ewentualnie po otrzymaniu WIFI GOT IP można zapytać jeszcze o IP - "AT+CIFSR", no i zostaje jeszcze tryb "AT+CWMODE=1".

    Ale u mnie raczej problemy z poprawnym odbiorem z UART. Coś za szybko prę do przodu. Chcąc odebrać znaki z UART i wyświetlić je na LCD robię tak


    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    Bo to co się powinno dziać w Case to rozumiem ( co prawda o tych etykietkach dla Case to nie wiedziałem )
    1. przychodzi znak - Ischarwaiting(#1) > 0
    2. odebranie znaku w podprogramie przez Inkey(#1)
    3. pominięcie znaków 10 i 13
    4. dodawanie każdego odebranego znaku do zmiennej typu string Uart_string
    5. gdy wartość licznika przekroczy wielkość zmiennej Uart_string zerowanie licznika i zmiennej Uart_string
    6. gdy w buforze coś jest to ustawienie flagi Mark

    Tak opisałem, żeby nie było, że nie wiem o co biega :D

    Powyższy kod poza czasem z PCF8563 odczytywanym co 0,5 sekundy nie wyświetla żadnych danych odebranych.

    Jeśli chodzi samego Thingspeak'a ( żeby nie było, że odchodzę od tematu ) to ja chcę aktualizować dane flagą od Timera - tzn. mam płytkę która :
    mierzy DS18B20
    mierzy DHT11
    mierzy MPL115A2
    wysyła na cały dom przez RFM12
    zapisuje na karcie SD

    do tego w planach
    sprawdzanie stanu pomp
    czujniki gazów
    czujnik kominowy termopary na układzie MAX6675
    drugi master na strychu ( bo główny nie ma dostępu do wszystkich interesujących mnie danych)

  • #16 19 Sty 2016 16:32
    373522
    Usunięty  
  • #17 19 Sty 2016 16:39
    Elektronik_Kraków
    Poziom 13  

    Cytat:
    Albo usuń te " #1 " z tych nawiasów albo dopisz w kodzie :


    To zadziałało. Dziękuję

    Tylko jest problem nie blokowania. Wyświetlacz odświeża godzinę tylko w momencie odebrania znaku(ów).

  • #18 19 Sty 2016 16:58
    373522
    Usunięty  
  • #19 20 Sty 2016 16:21
    Elektronik_Kraków
    Poziom 13  

    Cytat:
    Wiesz, każdy musi swoje odsiedzieć jeśli chce coś zrobić samemu a nie małpować

    Oczywiście, że ma Kolega rację - zresztą dobrze określił mnie szwagier, którego wciągnąłem w elektronikę i kontrolery - za dużo zastanawiam się jak dana funkcja działa, zamiast pomyśleć jak jej dobrze użyć.

    Cytat:
    Więc przykład działa na co jest dowód, ale inny moduł pewnie wymaga innego traktowania.

    Zgadza się, np teraz odłączając płytkę przez FT232 do PC i zmieniając
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    działa OK, ale jak będzie działać z ESP8266, czy z SIM800L to wyjdzie w "praniu"

TME logo Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
TME Logo