ESP8266 i DS18B20
Speed 74880
Data bits 8
Stop bits 1
Parity None
Flow Control XON/XOFF
Data bits 8
Stop bits 1
Parity None
Flow Control XON/XOFF
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ść ?
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ść ?
Po prostu w Putty spróbuj z innymi prędkościami.
9600, 19200, 38400, 57600, 115200
9600, 19200, 38400, 57600, 115200
Po długich bojach udało mi się odczytać z UART-a Raspberry.
Dla temperatury 19-20C dane wyglądają tak:
Kod ze strony http://tech.scargill.net/esp8266-and-th ... -ds18b20p/ ma warunek:
W repozytorium SUPLA jest
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.
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: Zaznacz cały
if (temperature>100) temperature-=4096;
Kod: Zaznacz cały
if ( t > 1000 )
t-=4096;
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.
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ść.
Zaraz to sprawdzę i dam znać.
Być może będzie można wykryć model i odpowiednio odpowiednio odczytywać wartość.
Przy próbie ogrzania suszarką zmieniają się wartości
Pozostałe bajty bez zmiany.
Kod: Zaznacz cały
data[0]
data[6]
data[7]
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.
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.
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
Na szybko znalazłem w kernelu przeliczenia dla obu:
https://github.com/raspberrypi/linux/bl ... erm.c#L186
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
(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