Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

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

Odbiór danych po wifi przez ESP8266 + ATmega1284

elektor18 23 Lis 2015 19:47 6873 18
  • #1 23 Lis 2015 19:47
    elektor18
    Poziom 18  

    Witam
    Mam układ ESP8266 i chciałbym użyć go do komunikacji z uC przez UART, z tym że dane chce wysyłać z laptopa lub smartfona. Czy jest możliwe przesłanie danych przez wifi do esp i "wyplucie" tego przez uart do ATmegi? Jeśli tak to gdzie tego szukać, serio przejrzałem wiele artykułów ale niczego sensownego nie znalazłem...

  • Fibaro
  • #2 26 Lis 2015 10:21
    pablo_banita
    Poziom 11  

    Witam!

    To co chciałbyś uzyskać to podstawa podstaw...
    Oczywiście, że można to i wiele więcej. Rozwiń swoją myśl (jeśli to nie tajemnica) co chciałbyś uzyskać. Czym wysyłać te dane (przeglądarka, terminal, czy jeszcze jakoś inaczej)? Co dalej z danymi w uC, co miałby robić?
    Którą wersje modułu posiadasz (są od ESP8266-01 do ESP8266-12).

    Troszkę się bawię tymi modułami i mogę Ci pomóc.

  • #3 03 Gru 2015 21:00
    elektor18
    Poziom 18  

    Posiadam wersje 01 (4Mb Flash). Chciałbym mieć dostęp za pomocą aplikacji napisanej w Visual Studio C# i wysyłać dane po wifi do ESP a ten po UART do uC a potem ewentualna odp uC w drugą strone.
    Czyli tak jak by terminal.

    Ewentualnie przez przeglądarkę ale to chyba będzie trudniejsze bo nie znam html itp.

  • #4 04 Gru 2015 11:04
    pablo_banita
    Poziom 11  

    Właśnie pytam co miałby uC dalej robić z tymi danymi. A pytam dlatego, że jest szansa żeby już sam ESP np. sterował czymś. Chciałem Cię też naprowadzić na klamkę w otwartych drzwiach (żebyś ich nie wywarzał), bo jest mnóstwo przykładów i oprogramowania w sieci ale ok.
    Załóżmy, że projekt jest złożony i potrzebujesz rzeczywiście zewnętrznego uC.

    Zaczął bym od podłączenia ESP przez przejściówkę (LVTTL lub dzielnik na rezystorach dla sygnałów TTL) do komputera, tak żebyś zobaczył co się dzieje w samym module po wydaniu komendy.
    Podłączenie dla przejściówki z poziomem LVTTL :
    Odbiór danych po wifi przez ESP8266 + ATmega1284
    lub dla poziomu TTL:
    Odbiór danych po wifi przez ESP8266 + ATmega1284

    Esp może pracować w kilku trybach tj. podłączyć się do istniejącej sieci WIFI, utworzyć nową sieć WIFI lub mieszanym.
    Zakładam,że chciałbyś połączyć się do sieci istniejącej. Najpierw trzeba sprawdzić odpowiednią prędkość połączenia (9600 - najczęściej lub 115200). Po połączeniu za pomocą dowolnego terminala np RealTerm wyślij komendę AT(+CRLF) jesli odpowiedź jest czytelna to ok, jeśli nie to zmień prędkość połączenia.
    Kiedy to będziesz miał ogarnięte wpisz kolejno :
    AT+CWMODE=3 - zmiana trybu pracy na AP+STA
    AT+RST - restart modułu
    AT+CWLAP - wyszukiwanie dostępnych sieci WIFI
    AT+CWJAP=“NAZWA”,“HASŁO” - podłączenie do wybranej sieci
    AT+CIFSR - sprawdzenie adresu IP jaki moduł dostał od rutera
    AT+CIPSERVER=1,9999 - ustaw serwer TCP na porcie 9999
    ITD...
    Dodatkowo jest kilka gotowych IDE do wgrania w ESP. Ja polecam nodemcu (który nie jest bez wad) ale do prostych zastosowań wystarczy. Za jego pomocą możesz np. ustawić nazwę i hasło do sieci (robisz to tylko raz) i moduł będzie łączył się automatycznie z wybraną siecią po każdym resecie czy zerwaniu połączenia. Dodatkowo za pomocą kilku linijek kodu (wpisanego w moduł) ustawisz go jako serwer bezbarwny dla połączenia - co wyślesz do modułu przez terminal to moduł prześle do uC i odwrotnie.

    Jak już wspomniałem nie ujawniasz co chciałbyś uzyskać (włączyć światło, otworzyć bramę, odczytywać temperaturę, a może coś wysadzić za pomocą bomby atomowej ;-) ), jednak gdybyś zdecydował się na wyjawienie zadania zaproponował bym pewnie gotowe rozwiązanie - pewnie bez pisania programów.
    W razie pytań atakuj...

    PS. w załączeniu dokumentacja - komendy AT

  • Fibaro
  • #5 16 Lut 2016 00:04
    adambehnke
    Poziom 24  

    Podłączę się do tematu bo nie chcę tworzyć nowego.
    Mam może i banalne pytanie.
    Otóż. Mam połączone ESP8266 z Atmegą32.
    I mam problem z przesłaniem komendy AT w postaci : AT+CIPSTART=1,"UDP","192.168.1.2",874,11012

    gdzie:

    192.168.1.2 to adres modułu do którego wysyłam dane
    874 - port docelowy na który trafią dane
    11012 - port z którego są wysyłane dane.

    Chodzi mi o to że nie mam zielonego pojęcia jak stworzyć sobie zmienne :port_nadawczy , port_docelowy , ip_odbiorcy. Bo kiedy składam z tych zmiennych całą komendę "do kupy" do jakiejś zmiennej string to oczywiście wycina mi cudzysłowy i komenda wygląda tak:

    AT+CIPSTART=1,UDP,192.168.1.2,874,11012

    no i rzecz jasna nie jest rozpoznawana jako poprawna komenda AT.

    Proszę o pomoc jak się za to zabrać.
    Ten sam problem mam kiedy robię to samo nie z poziomu AVR ale z poziomu PC poprzez przejściówkę opartą o FT232RL.
    Kiedy sobie z terminala wyślę komendę :AT+CIPSTART=1,"UDP","192.168.1.2",874,11012
    to wszystko działa poprawnie.

    Problem w tym iż chcę wysyłać dane pod różne IP i pod różne porty i cała komenda AT za każdym razem musi być składana na nowo.

    Wiem że to pewnie błachy i śmieszny problem ale utknąłem w miejscu :(

  • #6 16 Lut 2016 08:30
    BlueDraco
    Specjalista - Mikrokontrolery

    A jak to polecenie składasz i co to za tajemniczy byt wycina Ci te cudzysłowy? Masz prosty błąd w programie, którego nie chcesz pokazać, więc w jaki sposób mamy Ci pomóc?

  • #7 16 Lut 2016 11:21
    Elektronik_Kraków
    Poziom 13  

    Cytat:

    Chodzi mi o to że nie mam zielonego pojęcia jak stworzyć sobie zmienne :port_nadawczy , port_docelowy , ip_odbiorcy. Bo kiedy składam z tych zmiennych całą komendę "do kupy" do jakiejś zmiennej string to oczywiście wycina mi cudzysłowy i komenda wygląda tak:

    AT+CIPSTART=1,UDP,192.168.1.2,874,11012

    no i rzecz jasna nie jest rozpoznawana jako poprawna komenda AT.

    Nie wiem w jakim języku Kolega pisze, ale ja w Bascom robię to tak:
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

  • #8 16 Lut 2016 16:28
    adambehnke
    Poziom 24  

    Ja piszę w Visual Studio i GCC. Zaraz poćwiczę z chr(34) i(lub) podwójnymi cudzysłowami. Dam znać niebawem. Dziękuję.

  • #9 16 Lut 2016 16:34
    polprzewodnikowy
    Poziom 26  

    W C wystarczy wpisać \" w miejsce gdzie chcesz mieć cudzysłów. Np:

    Kod: c
    Zaloguj się, aby zobaczyć kod

  • #10 16 Lut 2016 17:44
    adambehnke
    Poziom 24  

    użyłem : Cmd = "AT+CIPSTART=4," + Chr(34) + "TCP" + Chr(34) + "," + Chr(34) + "184.106.153.149" + Chr(34) + ",80"

    Czyli chr(34) na tą chwile załatwiło sprawę w Visual Studio.NET :D

    a w C zaraz sprawdzę ale Kolega Półprzewodnikowy zapewne ma rację!

    Dziękuję!

  • Fibaro
  • #11 17 Lut 2016 22:26
    adambehnke
    Poziom 24  

    Wszystko działa jak należy. Dziękuję serdecznie za pomoc.

  • #12 02 Mar 2016 21:10
    mototest
    Poziom 19  

    Witam kolegów
    widzę że kolega pablo_banita jest biegły w temacie, ale proszę o pomoc wszystkich zagłębionych w temacie ESP
    chcę uzyskać podobny efekt jak kolega w pierwszym poście , na razie dla testu chciałbym wysłać jakieś dowolne słowo np. "Hello: z procka do ESP i odebrac to w terminalu np. UDP w visual basicu.
    Terminal UDP mam zrobiony i działa ,bo odbiera dane przesyłane przez inny moduł z Atnela, jednak Atnel jest drogi więc szukam taniego rozwiązania (bo będę potrzebował 10 modułów),
    jak mam skonfigurować ten ESP żeby wysyłał tekst przez UDP do terminala ?
    w Atnelu stworzyłem sobie osobną sieć np. dla testu IP: 10.10.100.254 i port 8899 ustawiłem moduł w tryb AP i jeżeli w terminalu ustawiłem ten port to odbierałem dane wkładane na RS232 modułu , natomiast w ESP nie wiem jak zrobić tą wewnętrzną sieć 10.10.100.254 i port 8899 oraz tryb UDP żeby odebrać to w terminalu

    chciałbym tez żeby to pracowało na statycznych adresach IP, żeby nie szukać potem modułów w sieci...
    docelowo chciałbym odczytywać temperaturę z 10 czujników i wyświetlać to w terminalu UDP , używając 10 modułów wifi

    chciałbym też to wszystko zrobić za pomocą komend AT, nie żadnego zewnętrznego oprogramowania

    oprogramowanie do modułu wgrałem to :
    https://github.com/espressif/esp8266_at/tree/master/bin

    Bogusław

  • #13 02 Mar 2016 21:27
    bialy
    Poziom 14  

    elektor18 napisał:
    Witam
    Mam układ ESP8266 i chciałbym użyć go do komunikacji z uC przez UART, z tym że dane chce wysyłać z laptopa lub smartfona. Czy jest możliwe przesłanie danych przez wifi do esp i "wyplucie" tego przez uart do ATmegi? Jeśli tak to gdzie tego szukać, serio przejrzałem wiele artykułów ale niczego sensownego nie znalazłem...


    Dla mnie soft OOTB z esp8266 to czyste zło ;)
    Możesz zmienić soft na https://github.com/nodemcu/nodemcu-firmware..
    Mam wersje 01 w której zmieniłem soft własnie nodemcu. Teraz mozna bez problemu korzystać z tego układu. Sama procedura zmienimy nie jest zbyt skomplikowana wszystko opisane na github'ie.

  • #14 21 Mar 2016 23:20
    adambehnke
    Poziom 24  

    Znów mam pytanie odnośnie komunikacji pomiędzy atmegą a ESP8266.
    Otóż mam teraz zestawione komunikację poprzez RXD i TXD .
    To co Koledzy pomogliście mi rozwikłać działa idealnie. Polecenia złożyłem i wszystko działa.
    Nadaję i odbieram pakiety bezproblemowo.
    Ale jeśli odbieram jakiś pakiet to nie wiem z jakiego IP i portu nadszedł pakiet.
    Jak to sprawdzić. Bo chciałbym mieć mozliwość wysłania odpowiedzi pod IP i port nadawcy.
    Wiem że w bibliotekach arduino do ESP8266 jest taka możliwość.
    Ale ja nie korzystam z żadnej biblioteki. Ja uzywam komunikacji po zwyczajnym UART.

    Proszę o jakieś podpowiedzi i sugestie.

  • #15 07 Lip 2016 19:58
    barth_bh
    Poziom 9  

    Panowie ja mam inne pytanie, Mam ESP-01 podłączone do Due - działa, chciałbym mieć możliwość aktualizacji firmwere ESP lub po prostu aktualizacji samego programu który się wykonuje na ESP. Wyciąganie i programowanie modułu ESP na FTDI jest uciążliwe - wymyśliłem sobie że po wgraniu do Due softu który z UART kieruje na serial TX RX będzie możliwość przez Due wgrać nowy program do ESP - i teraz owszem działa ale tylko jako serial monitor komend AT. pomimo sterownia nogą do flashowania czyli GPIO0 (LOW) z Due - nie da się wgrać nowego softu

    oto kod:
    #define Serial_ESP Serial1
    #define Serial_Debug Serial

    #define Serial_Baud 115200


    int CH_PD_8266 = 53;
    int RST_ESP=12;
    int Programowanie=9;

    // =======================================================================
    void setup() {
    Serial_ESP.begin(Serial_Baud);
    Serial_Debug.begin(Serial_Baud);

    pinMode(CH_PD_8266, OUTPUT);
    pinMode(Programowanie, OUTPUT);
    pinMode(RST_ESP, OUTPUT);

    digitalWrite(Programowanie, HIGH );
    //digitalWrite(CH_PD_8266, LOW );
    digitalWrite(RST_ESP, HIGH);
    digitalWrite(CH_PD_8266, HIGH );

    digitalWrite(Programowanie, LOW );
    digitalWrite(RST_ESP, LOW);

    digitalWrite(Programowanie, HIGH );
    digitalWrite(RST_ESP, HIGH);







    }
    // =======================================================================
    void loop() {
    if (Serial_ESP.available()) {

    Serial_Debug.write(Serial_ESP.read());
    }
    Serial_Debug.flush();

    if (Serial_Debug.available()) {

    Serial_ESP.write(Serial_Debug.read());
    }
    Serial_ESP.flush();
    }


    Wygląda na to że nie mogę wprowadzić ESP w tryb programowania...
    ESP RESET podwieszony przez 10ko do +3v3
    CH_PD również

    Macie jakieś pomysły?

  • #16 12 Lip 2016 11:49
    pablo_banita
    Poziom 11  

    barth_bh napisał:
    #define Serial_Baud 115200
    ...Macie jakieś pomysły?

    Już trochę czasu minęło więc nie pamiętam dokładnie, ale spróbuj zmienić prędkość na np. 38400, 9600, 19200 (najlepiej na taką jaką programujesz moduł zewnętrznie :D ) i zobacz co się stanie.
    pozdrawiam
    Paweł

  • #17 12 Lip 2016 12:43
    barth_bh
    Poziom 9  

    Wszystko gra - okazuje się aby załadować program do ESP przez Due należy to zrobić od razu po restarcie - u mnie się wykonywały inne programy nim stan na GIPO0 się zmienił na LOW było już za późno po resecie COMa.

    Innymi słowy jeśli chcecie programować ESP i do tego zamiast FTDI użyć Arduino - należy procedure uploadu do ESP wykonywać tuż po restarcie poniżej kod

    if(isUploading == true)
    {
    if (Serial1.available()) {
    Serial.write(Serial1.read());
    waitTime = millis();
    }
    Serial.flush();

    if (Serial.available()) {
    Serial1.write(Serial.read());}
    Serial1.flush();

    if (waitTime + 3000 <= millis())
    {
    digitalWrite(Programowanie, HIGH);
    digitalWrite(RST_ESP, LOW);
    digitalWrite(Programowanie, HIGH);
    delay(10);
    digitalWrite(RST_ESP, HIGH);
    digitalWrite(Programowanie, HIGH);
    isUploading = false;
    }

    }
    else ... wykonuj program główny.

    Jedyny mankament to uruchamianie programu o sekundę dłużej ale zyskuje się wtedy wygodę ponieważ nic nie trzeba robić prócz uruchomienia Flashera do ESP

  • #18 13 Lip 2016 09:21
    piotr411
    Poziom 22  

    barth_bh napisał:
    Panowie ja mam inne pytanie, Mam ESP-01 podłączone do Due - działa, chciałbym mieć możliwość aktualizacji firmw


    Jeśli znasz Basic, to właśnie wszytko czego Ci potrzeba znajdziesz w Basic ESP
    Link

    Cała edycja czy wgrywanie nowego programu odbywa się przez stronę "www"
    Dlatego z dowolnego urządzenia, posiadającego przeglądarkę możesz poprawiać swój program. Może to być smartphone, tablet, PC, z dowolnym systemem, Android, iOS, Windows, Linux, etc......

  • #19 21 Maj 2017 12:08
    Kamlos
    Poziom 11  

    Przede mną zadanie tak jak w pierwszym wątku - chcę smartfonem odczytywać temperaturę z czujnika i sterować oświetleniem. Sterowanie oświetleniem ogarnąłem. Wgrałem do ESP8266-07 program który zamienia moduł ESP w webserver i steruje oświetleniem z poziomu przeglądarki. Chcę aby sterowanie odbywało się z poziomu aplikacji na Androida ale to zostawiam na koniec. Utknąłem i stoję w miejscu na etapie wymiany danych pomiędzy telefonem a modułem ESP przez wifi(TCP lub ewentualnie UDP). Czujnik podpięty mam pod moduł ESP. Czy znajdzie się na forum i osoba która wyjaśni mi w jaki sposób przy pomocy komend AT wysłać pobrane z czujnika dane i w jaki sposób je odebrać np. telefonem?

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