esp8266 64bajty buforu? Dlaczego to sie sypie?

Jul 11, 2017 5 Replies

Ten kawałek kodu: void loop() { String dht_out; float h = dht.readHumidity(); float t = dht.readTemperature(); if (isnan(h) || isnan(t)) { dht_out="No DHT!"; } else { dht_out="TD="+String(t,1)+" HD="+String(h,1); } lcd.setCursor(0, 0); lcd.print("TB="+String(bmp.readTemperature(),1)+"PB="+String(bmp.readPressure()/100)+" "); lcd.setCursor(0, 1); lcd.print(dht_out);



delay(500);



//Komunikacja z esp do debuga String tmp=""; while (Serial.available()>0) { char inByte=Serial.read(); tmp+=inByte; } if (tmp.length()>0) { DebugSerial.print(tmp); }



//komunikajca z debuga do esp while (DebugSerial.available()>0) { char outByte=DebugSerial.read(); Serial.write(outByte); } }



Ma słuzyc narazie tylko jako interfejs przerzucający dane między jednym a drugim serialem. I dziala prawie dobrze. Problemem jest mianowicie przycinanie wyniku do 64bajtów. Mimo że kopiuje po kolei bajty z Serial za pomoca Serial.read to po 64 sztukach petla while sie konczy a po drugim przejsciu ogólnej petli juz nic nie czyta.



Po zwiększeniu bufora do 164 w pliku HardwareSerial.h wczytuje sie więcej.



Co robie nie tak? Czy mozliwe ze wciaganie bajtów z bufora po jednym jest na tyle wolne ze przy 115200 wczytanie 64 trwa tyle ze mi sie bufor od nowa napełni?


W dniu środa, 12 lipca 2017 00:33:42 UTC+2 użytkownik snipped-for-privacy@gmail.com napisał:

Dobra, juz wiem :) Bez sensu najpierw czytam odpowiedź a potem zadaje zadanie dla esp i nastepnie robie cale czytanie sensorów i czekam 500ms.

Trzeba to przepisać na cos sensowniejszego :)

Użytkownik napisał w wiadomości grup dyskusyjnych: snipped-for-privacy@googlegroups.com... W dniu środa, 12 lipca 2017 00:33:42 UTC+2 użytkownik snipped-for-privacy@gmail.com napisał:

A moze wystarczy bufor powiekszyc?

Bo jak sie domyslam, ta softwareowa biblioteka na przerwaniach port czyta ... to dac wiekszy bufor i po sprawie.

Tylko pamietac, ze z Wifi moze przyjsc z 10MB/s :-)

J.

W dniu środa, 12 lipca 2017 11:54:34 UTC+2 użytkownik J.F. napisał:

Dla testu dalem 250 bajtów. Ale to złe rozwiązanie :)

Juz znalazlem feler. Wieczorkiem sobie poprawie.

A DOS-a to mozna zrobic w sumie chyba kazdemu :) na różne sposoby więc narazie sie tym nie martwie, jak mi ktos zdosuje te stacje pogody to sie zaczne martwic :)

ryzykując przecfelenie, zapytam...

z czego korzystasz przy kompilacji - jaki tool i jaki opis pdf?

o co chodzi z tym debugowaniem po serialu?

W dniu środa, 12 lipca 2017 18:07:05 UTC+2 użytkownik wół, wół roboczy, wół dojno roboczo obronny 'POPIS/EU napisał:

Całośc sie nazywa arduino.

Normalnie musisz mieć mikrokontroler, plytke pcb, programator i co tam sobie chcesz do tego mikrokontrolera podłaczyć. To sporo zachodu nawet jak sie montuje takie zabawy na plytce prototypowej (tej grubej, nie tej pcb z milyjonem otworów).

Jakieś ludki wymyslili ze mozna ludziom sprzedać mikrokontroler na plytce z interfejsem usb i headerami dla wygodnego podpinania dodatkowych układów.

Do tego dodali środowisko programistyczne które tez nazywa sie arduino. Pisze sie w nim w C. Ale w praktyce programy wychodzą mocno podobne do basica bo wiekszość tego co chcesz robic jest juz przez kogos napisana i tylko posługujesz sie biblioteką.

I np. zamiast dumać jak ustawić port szeregowy po prostu piszesz Serial.begin(115200); i juz masz calosc ustawiona.

W praktyce praca wyglada tak ze podpinasz te plytke do kompa po usb, uruchamiasz te środowisko arduino i piszesz programy. Do dyspozycji masz mini terminal szeregowy i zazwyczaj aby sprawdzić co tam w programie sie dzieje piszesz sobie np. Serial.println("wartosc zmiennej X:"+X); I elegancko widzisz jaka wartosc ma ta zmienna w okienku terminala.

W moim przypadku uparłem się ze wykorzystam mniejsza i tansza plytke która ma tylko jeden sprzetowy serial. A moduł wifi komunikuje sie z plytka wlasnie po serialu. I aby debugowac i korzystac z modułu wifi potrzebuje dwu serialów. Dlatego skorzystałem z programowego seriala jako dodatkowego.

Serial - łącze szeregowe Pi*oko zgodne z rs232 Arduino -

formatting link
do pisania dla arduino -
formatting link
Na allegro mozna kupic "podróbki" arduino za niewielkie pieniądze i zacząc się bawić.

Dokumentacja jest w wiekszości tu:

formatting link
kazda biblioteka ma swoje przyklady do odmałpowania. I czasem trzeba grzebnąć w dokumentacji np. w przypadku modułu wifi tu:
formatting link

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required