Rygiel furtki z pamięcią
jest na githubieZybi pisze:Przemek, czy możesz udostępnić kod dla rygla z pamięcią?
Kod jest faktycznie, ale będę dalej ciągnął temat w zakresie sterowania ręcznego. Myślałem, że jak zdefiniuję dla przycisku konfiguracji #define CFGBTN_TYPE_SELECTION to załatwi mi sprawę, tj. tym samym przyciskiem będę wchodził w tryb konfiguracji i sterował ręcznie przekaźnikiem. Niestety nic z tego bo "wywala" błędy przy kompilacji i nic nie udało mi się z tym zrobić. Zrobiłem więc inaczej:
#define USE_GPIO16_OUTPUT
#define BUTTON3_PORT 13
#define CFG_PORT 5
#define LED_GREEN_PORT 12
#define LED_BLUE_PORT 14
#define RELAY1_PORT 4
#define RELAY2_PORT 16
#define INPUT_PORT1 12
#define INPUT_PORT2 14
czyli sterowanie przyciskiem na pinie 13. Dla tego przycisku poprzez analogię zastosowałem funkcję jak dla BUTTON1 i BUTTON2, czyli:
#if defined(BUTTON3_PORT) && defined(RELAY1_PORT)
single_key[keys.key_num] = key_init_single(BUTTON3_PORT, NULL, supla_esg_gpio_button3_pressed);
keys.key_num++;
#endif
#if defined(BUTTON3_PORT) && defined(RELAY1_PORT)
void supla_esg_gpio_button3_pressed(void) {
supla_esg_gpio_relay_switch(RELAY1_PORT);
}
#endif
To działa tylko, że w takim przypadku sterowanie przyciskiem powoduje stałe załączenie/wyłączenie przekaźnika, a według założeń powinien on załączyć się tylko na określony czas (2-4 s) lub na czas trzymania przycisku. I tu prośba do Ciebie Przemek o dopisanie kodu zastępującego:
supla_esg_gpio_relay_switch(RELAY1_PORT);
#define USE_GPIO16_OUTPUT
#define BUTTON3_PORT 13
#define CFG_PORT 5
#define LED_GREEN_PORT 12
#define LED_BLUE_PORT 14
#define RELAY1_PORT 4
#define RELAY2_PORT 16
#define INPUT_PORT1 12
#define INPUT_PORT2 14
czyli sterowanie przyciskiem na pinie 13. Dla tego przycisku poprzez analogię zastosowałem funkcję jak dla BUTTON1 i BUTTON2, czyli:
#if defined(BUTTON3_PORT) && defined(RELAY1_PORT)
single_key[keys.key_num] = key_init_single(BUTTON3_PORT, NULL, supla_esg_gpio_button3_pressed);
keys.key_num++;
#endif
#if defined(BUTTON3_PORT) && defined(RELAY1_PORT)
void supla_esg_gpio_button3_pressed(void) {
supla_esg_gpio_relay_switch(RELAY1_PORT);
}
#endif
To działa tylko, że w takim przypadku sterowanie przyciskiem powoduje stałe załączenie/wyłączenie przekaźnika, a według założeń powinien on załączyć się tylko na określony czas (2-4 s) lub na czas trzymania przycisku. I tu prośba do Ciebie Przemek o dopisanie kodu zastępującego:
supla_esg_gpio_relay_switch(RELAY1_PORT);
TSD_SuplaChannelNewValue new_value;
memset(&new_value, 0, sizeof(TSD_SuplaChannelNewValue));
new_value.ChannelNumber = 0; // Numer kanału na którym wisi przekaźnik
new_value.DurationMS = 1000; // Czas załączenia w milisekundach. Ma znaczenie tylko dla stanu wysokiego
new_value.value[0] = 0; // 0 stan niski, 1 stan wysoki np. ew_value.value[0] = 1
supla_esp_channel_set_value(&new_value);
memset(&new_value, 0, sizeof(TSD_SuplaChannelNewValue));
new_value.ChannelNumber = 0; // Numer kanału na którym wisi przekaźnik
new_value.DurationMS = 1000; // Czas załączenia w milisekundach. Ma znaczenie tylko dla stanu wysokiego
new_value.value[0] = 0; // 0 stan niski, 1 stan wysoki np. ew_value.value[0] = 1
supla_esp_channel_set_value(&new_value);
Dodałem czujniki temperatury i wilgotności do modułu z mem. Kompilacja softu z czujnikami DHT11 i DHT22 idzie bez problemów. Soft z DHT11 przetestowałem i działa. Natomiast nie przechodzi mi kompilacja z czujnikiem DS18B20.
Fragment z błędem:
/home/supla/Devel/Espressif/xtensa-lx106-elf/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld: .output/eagle/debug/image/eagle.app.v6.out section `.text' will not fit in region `iram1_0_seg'
collect2: error: ld returned 1 exit status
/home/supla/Devel/Espressif/ESP8266_IOT_SDK/Makefile:362: recipe for target '.output/eagle/debug/image/eagle.app.v6.out' failed
make: *** [.output/eagle/debug/image/eagle.app.v6.out] Error 1
Można temu zaradzić ?
Fragment z błędem:
/home/supla/Devel/Espressif/xtensa-lx106-elf/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld: .output/eagle/debug/image/eagle.app.v6.out section `.text' will not fit in region `iram1_0_seg'
collect2: error: ld returned 1 exit status
/home/supla/Devel/Espressif/ESP8266_IOT_SDK/Makefile:362: recipe for target '.output/eagle/debug/image/eagle.app.v6.out' failed
make: *** [.output/eagle/debug/image/eagle.app.v6.out] Error 1
Można temu zaradzić ?
Skomilowana binarka przekracza dostępną przestrzeń we flashu.
Trzeba to skomilować inaczej.
do build.sh https://github.com/SUPLA/supla-core/blo ... ild.sh#L86
trzeba dopisać
UPGRADE_1024=1
i wtedy trzeba pliki wgrać pod inne adresy
boot_v1.2.bin--------------------->0x00000
sonoff_ds18b20_user1.1024.new.2.bin--------->0x01000
Trzeba to skomilować inaczej.
do build.sh https://github.com/SUPLA/supla-core/blo ... ild.sh#L86
trzeba dopisać
UPGRADE_1024=1
i wtedy trzeba pliki wgrać pod inne adresy
boot_v1.2.bin--------------------->0x00000
sonoff_ds18b20_user1.1024.new.2.bin--------->0x01000
Kompilacja przy ustawieniach:
CFG_SECTOR=0xBC
UPGRADE_1024=1
nie poszła, ale poszła przy:
DEP_LIBS="-lpwm"
NOSSL=1
Moduł ESP-12E przetestowany i działa.
W zakresie tego tematu "Rygiel furtki z pamięcią" to już raczej wszystko (chyba, że te NOSSL=1 można by wyeliminować). Dzięki Przemek za skuteczną pomoc. Pozostaje już tylko realizacja praktyczna.
CFG_SECTOR=0xBC
UPGRADE_1024=1
nie poszła, ale poszła przy:
DEP_LIBS="-lpwm"
NOSSL=1
Moduł ESP-12E przetestowany i działa.
W zakresie tego tematu "Rygiel furtki z pamięcią" to już raczej wszystko (chyba, że te NOSSL=1 można by wyeliminować). Dzięki Przemek za skuteczną pomoc. Pozostaje już tylko realizacja praktyczna.
Hmm, dziwne. Jak już bez SSL-a, a nie używasz pwm-a to można
DEP_LIBS=""
DEP_LIBS=""