Takie małe poprawki

greg
Posty: 17
Rejestracja: śr sty 15, 2020 8:11 am

Witam

Pytam, bo nie umie znaleźć jak to zrobić:

Moja historia wygląda tak: parę tygodni temu kupiłem SONOFF TH16.
Od razu wrzuciłem do środka odpowiedni plik wygenerowany za pomocą narzędzi z SUPLA-IoT_SDK.
Po wgraniu w Supli pokazały się dwa kanały: przekaźnik i czujnik (wilgotność + temperatura).
Przekaźnik działał, czujnik niestety NIE.
Po konsultacjach z doktorem Google okazało się, że w środku mam czujnik Si7021+ mały procesorek a nie obiecany TH22. :)
Po kolejnych konsultacja z w/w doktorem udało mi się zmodyfikować plik src/driver/dht22.c i wygenerować nowe wsady tak, żeby to wszystko zaczęło działać. Musiałem zmodyfikować pare stałych czasowych.

No i teraz moje pytanie:

Poświęciłem temu parę godzin. Mam w miarę uporządkowany kod. Zmiany fajnie widać spod git-a. Chętnie się podzielę swoją pracą.
Jak mogę przesłać to do projektu Supli ?
Patryk
Posty: 2674
Rejestracja: pn sty 07, 2019 7:51 pm
Lokalizacja: Rybnik

Wow !!!
Było by super.
A tak na już mógłbyś to tu:
 viewtopic.php?f=17&t=4735
udostepnić ???
Ps.
Żeby wszystko było w jednym miejscu.
Chętnie bym to potestowal.
A z wrzuceniem, Ci nie pomogę, bo jestem za słaby jeszcze w tym temacie.
Awatar użytkownika
pzygmunt
Posty: 18207
Rejestracja: wt sty 19, 2016 9:26 am
Lokalizacja: Paczków
Kontakt:

Wrzucasz Pull Request na githubie. W między czasie ustalasz ze mną Twoje wynagrodzenie za tą pracę. Jeśli PR nadaje się do zaakceptowania to się rozliczamy i wtedy Twój kod jest włączamy do głównego repo.

Od razu zaznaczę. Nie akceptuje PR-ów do głównego repo bez zapłaty autorowi za jego pracę.
greg
Posty: 17
Rejestracja: śr sty 15, 2020 8:11 am

Wrzucone do PR.
Dla ciekawych wrzucę od razu tutaj (skoro tu zacząłem).
Trzeba zmodyfikować dwa plik:

/include/driver/dht22.h

Kod: Zaznacz cały

#define DEV_TH22    1
#define DEV_SI7021  2

#define DEV_TYPE    DEV_SI7021
/driver/dht22.c

Kod: Zaznacz cały

bool DHTRead(DHT_Sensor *sensor, DHT_Sensor_Data* output)
{
	int counter = 0;
	int laststate = 1;
	int i = 0;
	int j = 0;
	int checksum = 0;
	int data[100];
	data[0] = data[1] = data[2] = data[3] = data[4] = 0;
	uint8_t pin = GPIO_ID_PIN(sensor->port);

	// Wake up device, 250ms of high
	GPIO_OUTPUT_SET(pin, 1);
	sleepms(250);

#if (DEV_TYPE  ==  DEV_SI7021)

	// Hold low for 500us
	GPIO_OUTPUT_SET(pin, 0);
	os_delay_us(500);

	// High for 40us
	GPIO_OUTPUT_SET(pin, 1);
	os_delay_us(50);
	// Set DHT_PIN pin as an input
	GPIO_DIS_OUTPUT(pin);

#elif (DEV_TYPE  ==  DEV_TH22)


	// Hold low for 20ms
	GPIO_OUTPUT_SET(pin, 0);
	sleepms(20);
	// High for 40ns
	GPIO_OUTPUT_SET(pin, 1);
	os_delay_us(40);
	// Set DHT_PIN pin as an input
	GPIO_DIS_OUTPUT(pin);

#endif
Mam jeszcze SONOFF-POW z pomiarem prądu. Ale pomiar mi nie działa, bo działać nie może. Nie ma obsług przetwornika ADC. Czy ktoś już może coś z tym robił ?
Yepestis
Posty: 605
Rejestracja: pn wrz 24, 2018 6:08 pm
Lokalizacja: Wrocław

greg pisze: pn lut 03, 2020 4:59 pm Mam jeszcze SONOFF-POW z pomiarem prądu. Ale pomiar mi nie działa, bo działać nie może. Nie ma obsług przetwornika ADC. Czy ktoś już może coś z tym robił ?
viewtopic.php?f=42&t=3311
viewtopic.php?f=42&t=4009
Patryk
Posty: 2674
Rejestracja: pn sty 07, 2019 7:51 pm
Lokalizacja: Rybnik

greg pisze: pn lut 03, 2020 4:59 pm Wrzucone do PR.
Dzięki.
Wybacz (może) za proste pytanie.( Nie jestem informatykiem ).
Jak to teraz wykorzystać w "praktyce".
Konkretnie w przykładzie sonoff_th.
Co trzeba dodać w plikach sonoff_th.c oraz sonoff_th.h , żeby ten czujnik był "obsługiwany".
Ps.
Myślałem, że przykład znajdę u Ciebie na github-ie  ( zmodyfikowany kod dla sonoff-a th ), ale tam jest "oryginalny".
greg
Posty: 17
Rejestracja: śr sty 15, 2020 8:11 am

Cześć
To jest ma moim githubie, z tym że zmiany zostały zrobione w plikach drivera czyli:
supla-espressif-esp/src/driver/dht22.c
supla-espressif-esp/src/include/driver/dht22.h

Zrobiłem tak, żeby była możliwość kompilacji dla czujnika TH22 i SI7021 wszystko zależy od tego jaką wartość przyjmie zmienna DEV_TYPE w pliku .../dht22.h.

W sumie można było przerzucić definicję zmiennej DEV_TYPE do pliku
supla-espressif-esp/src/include/board/sonoff_th.h
Wtedy przełącznik musiałby się nazywać trochę "mądrzej", np.SENSOR_DEV_TYPE, ale to już zależy od "architektów" tego systemu :)

Puki co, zaglądnij do tych dwóch pierwszych plików.
Swoją drogą to sonoff_th.h definiuje aż trzy kanały - dodatkowo definiowany jest kanał dla termometru DS18B20. Chyba nie potrzebny.
Pozdrawiam
Patryk
Posty: 2674
Rejestracja: pn sty 07, 2019 7:51 pm
Lokalizacja: Rybnik

greg pisze: wt lut 04, 2020 6:41 am Cześć
To jest ma moim githubie, z tym że zmiany zostały zrobione w plikach drivera czyli:
supla-espressif-esp/src/driver/dht22.c
supla-espressif-esp/src/include/driver/dht22.h
Dzięki za info.
Zmiany widzę w plikach drivera.

Może tak zadam pytanie - czy moduł sam wykryje jaki ma typ czujnika podłączony ( DHT22 lub SI7021 ) , czy trzeba go dopiero "jakoś" zdefiniować w plikach  ( sonoff_th.c i sonoff_th.h ).
greg
Posty: 17
Rejestracja: śr sty 15, 2020 8:11 am

Nie wykryje. Trzeba zdefiniować w pliku dht22.h. Swoją drogą automatyczne wykrywanie chyba dałoby się zrobić. Wtedy można by swobodnie wymieniać czujniki bez podgrywania softu. Szkopuł w tym, że nie mam oryginalnego DHT22.
Awatar użytkownika
klew
Posty: 8177
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

greg pisze: wt lut 04, 2020 11:57 am Nie wykryje. Trzeba zdefiniować w pliku dht22.h. Swoją drogą automatyczne wykrywanie chyba dałoby się zrobić. Wtedy można by swobodnie wymieniać czujniki bez podgrywania softu. Szkopuł w tym, że nie mam oryginalnego DHT22.
Dosyć dziwnym mi się wydaje, że obsługę czujnika SI7021 definiuje się w pliku o nazwie dht22 ;)
Widzimy się na Supla Offline Party vol. 2 :!:
ODPOWIEDZ

Wróć do „supla-dev”