ESP8266 i DS18B20

0xFF
Posty: 308
Rejestracja: sob lut 20, 2016 8:54 pm

Jaka powinna być ustawiona prędkość portu?
Awatar użytkownika
pzygmunt
Posty: 18352
Rejestracja: wt sty 19, 2016 9:26 am
Lokalizacja: Paczków
Kontakt:

Speed 74880
Data bits 8
Stop bits 1
Parity None
Flow Control XON/XOFF
0xFF
Posty: 308
Rejestracja: sob lut 20, 2016 8:54 pm

Mam ESP8266 podłączone do Raspberry Pi, niestety UART nie obsługuje 74880 b/s.
Przejściówka USB-TTL, którą mam też chyba nie obsługuje, bo Putty wyrzuca krzaczki.

Da się łatwo przekonfigurować UART ESP8266 na jakąś "tradycyjną" szybkość ?
Awatar użytkownika
pzygmunt
Posty: 18352
Rejestracja: wt sty 19, 2016 9:26 am
Lokalizacja: Paczków
Kontakt:

Po prostu w Putty spróbuj z innymi prędkościami.


9600, 19200, 38400, 57600, 115200
0xFF
Posty: 308
Rejestracja: sob lut 20, 2016 8:54 pm

Po długich bojach udało mi się odczytać z UART-a Raspberry.

Dla temperatury 19-20C dane wyglądają tak:

Kod: Zaznacz cały

data[0]=40
data[1]=0
data[2]=75
data[3]=70
data[4]=255
data[5]=255
data[6]=9
data[7]=16
Kod ze strony http://tech.scargill.net/esp8266-and-th ... -ds18b20p/ ma warunek:

Kod: Zaznacz cały

if (temperature>100) temperature-=4096; 
W repozytorium SUPLA jest

Kod: Zaznacz cały

 if ( t > 1000 )
        	t-=4096;
W moim przypadku to chyba nie ma znaczenia, bo data[1]=0

Ostatnia sprawa, mój DS jest oznaczony DS1820 , bez "B". Już nie pamiętam jaki model kupowałem, ale nie powinno mieć to znaczenia - różnią się tylko dokładnością odczytu temperatury .
Testowałem 2 sztuki, oba dają za niską temperature. Podłączałem pod RPi - tam działają poprawnie.
Awatar użytkownika
pzygmunt
Posty: 18352
Rejestracja: wt sty 19, 2016 9:26 am
Lokalizacja: Paczków
Kontakt:

Dokładnie o dokładność chodzi.
Zaraz to sprawdzę i dam znać.
Być może będzie można wykryć model i odpowiednio odpowiednio odczytywać wartość.
0xFF
Posty: 308
Rejestracja: sob lut 20, 2016 8:54 pm

Przy próbie ogrzania suszarką zmieniają się wartości

Kod: Zaznacz cały

data[0]
data[6]
data[7]
Pozostałe bajty bez zmiany.
Awatar użytkownika
pzygmunt
Posty: 18352
Rejestracja: wt sty 19, 2016 9:26 am
Lokalizacja: Paczków
Kontakt:

W funkcji supla_ds18b20_read_temperatureB
Zamień
t = (data[0]+(data[1]*256))/16.0;
na
t = ((((int8_t)data[1])<<8) | data[0]) / 2.0;


i usuń

if ( t > 1000 )
t-=4096;


Zastosowane przeliczanie było z przykładu http://tech.scargill.net/esp8266-and-th ... -ds18b20p/
teraz się temu przyjrzałem i wypracowałem wzór
t = ((((int8_t)data[1])<<8) | data[0]) / 16.0;

dla DS18B20 dla DS1820 będzie po prostu mniejsza precyzja.

daj znać czy działa.
0xFF
Posty: 308
Rejestracja: sob lut 20, 2016 8:54 pm

Właśnie przeglądałem dokumentację i faktycznie inne mapy pamięci mają te wersje.

Na szybko znalazłem w kernelu przeliczenia dla obu:
https://github.com/raspberrypi/linux/bl ... erm.c#L186
Awatar użytkownika
pzygmunt
Posty: 18352
Rejestracja: wt sty 19, 2016 9:26 am
Lokalizacja: Paczków
Kontakt:

Nie mam na biurku teraz podłączonych tych czujników ale sprawdziłem wartości z tabel referencyjnych

(Table 1. Temperature/Data Relationship)
https://datasheets.maximintegrated.com/ ... S18B20.pdf

(TEMPERATURE/DATA RELATIONSHIPS Table 1)
http://www.systronix.com/Resource/ds1820.pdf

i teoretycznie powinno teraz działać stosując przelicznik:

((((int8_t)data[1])<<8) | data[0]) / 2.0; dla DS1820

i

((((int8_t)data[1])<<8) | data[0]) / 16.0; dla DS10B20

Jutro to w praktyce przetestuję przynajmniej dla DS18B20
ODPOWIEDZ

Wróć do „Nowości”