ESP8266 i DS18B20

0xFF
Posts: 300
Joined: Sat Feb 20, 2016 8:54 pm

Fri Feb 26, 2016 9:07 pm

Jaka powinna być ustawiona prędkość portu?
User avatar
pzygmunt
Posts: 4229
Joined: Tue Jan 19, 2016 9:26 am
Location: Paczków
Contact:

Fri Feb 26, 2016 9:17 pm

Speed 74880
Data bits 8
Stop bits 1
Parity None
Flow Control XON/XOFF
0xFF
Posts: 300
Joined: Sat Feb 20, 2016 8:54 pm

Sat Feb 27, 2016 11:31 am

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ść ?
User avatar
pzygmunt
Posts: 4229
Joined: Tue Jan 19, 2016 9:26 am
Location: Paczków
Contact:

Sun Feb 28, 2016 11:59 am

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


9600, 19200, 38400, 57600, 115200
0xFF
Posts: 300
Joined: Sat Feb 20, 2016 8:54 pm

Tue Mar 01, 2016 4:20 pm

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

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

Code: Select all

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:

Code: Select all

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

Code: Select all

 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.
User avatar
pzygmunt
Posts: 4229
Joined: Tue Jan 19, 2016 9:26 am
Location: Paczków
Contact:

Tue Mar 01, 2016 5:30 pm

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
Posts: 300
Joined: Sat Feb 20, 2016 8:54 pm

Tue Mar 01, 2016 5:38 pm

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

Code: Select all

data[0]
data[6]
data[7]
Pozostałe bajty bez zmiany.
User avatar
pzygmunt
Posts: 4229
Joined: Tue Jan 19, 2016 9:26 am
Location: Paczków
Contact:

Tue Mar 01, 2016 7:57 pm

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
Posts: 300
Joined: Sat Feb 20, 2016 8:54 pm

Tue Mar 01, 2016 8:32 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
User avatar
pzygmunt
Posts: 4229
Joined: Tue Jan 19, 2016 9:26 am
Location: Paczków
Contact:

Tue Mar 01, 2016 8:45 pm

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
Post Reply