własna kompilacja sonoff touch

Post Reply
kris.sg
Posts: 105
Joined: Mon Aug 07, 2017 8:08 pm
Location: Przezchlebie

Fri Feb 15, 2019 3:50 pm

Witam
Jestem na etapie kompilowania softu do sonoffa touch dual.
Z obsługą gpio10 jako input sobie poradziłem przez dodanie do gpio init:

Code: Select all

#ifdef USE_GPIO9
	   PIN_FUNC_SELECT(PERIPHS_IO_MUX_SD_DATA3_U, FUNC_GPIO10);
	   PIN_PULLUP_EN(PERIPHS_IO_MUX_SD_DATA3_U);
    #endif
natomiast mam problem z obsługą gpio0 jako input, moduł prawie za każdym razem po uruchomieniu ustawia stan wysoki na wyjściu gpio12 (które jest powiązane z gpio0) z loga wnioskuję, że przerwanie wykrywa zmianę stanu gpio0 przy starcie czyli tak jak bym nacisnął na panel dotykowy.
dawałem opóżnienie przed włączeniem obsługi przerwań w gpio init ale nie wiele to zmienia.
jak prawidłowo zrobić obsługę portu gpio0 jako input ?
dodatkowo log z modułu :

Code: Select all

 ets Jan  8 2013,rst cause:2, boot mode:(3,6)

load 0x40100000, len 1856, room 16 
tail 0
chksum 0x63
load 0x3ffe8000, len 776, room 8 
tail 0
chksum 0x02
load 0x3ffe8310, len 552, room 8 
tail 0
chksum 0x79
csum 0x79

2nd boot version : 1.5
  SPI Speed      : 40MHz
  SPI Mode       : DOUT
  SPI Flash Size & Map: 8Mbit(512KB+512KB)
jump to run user1 @ 1000

rf cal sector: 251
rf[112] : 00
rf[113] : 00
rf[114] : 01

SDK ver: 1.5.4.1(39cb9a32) compiled @ Jul  1 2016 20:04:35
phy ver: 972, pp ver: 10.1

RST reason: 6
CFG READ SUCCESS!
STATE READ SUCCESS!
gpio_init_delay
supla_esp_gpio_init
gpio_init_delay
relay init 12
RESTORE_FORCE, 0, 12, 0
port=12, hi=0, save_before=255
supla_esp_gpio_set_hi 12, 0
supla_esp_gpio_set_hi 12, 0
relay init 5
INTR
INTR(b) port=0
RESTORE_FORCE, 1, 5, 0
port=5, hi=0, save_before=255
supla_esp_gpio_set_hi 5, 0
supla_esp_gpio_set_hi 5, 0
input init 0
input init 9
INTR
INTR(b) port=0
gpio_init_delay
Starting 214185
Disconnected
supla_esp_gpio_set_hi 13, 1
data  : 0x3ffe8000 ~ 0x3ffe83c4, len: 964
rodata: 0x3ffe83d0 ~ 0x3ffeb658, len: 12936
bss   : 0x3ffeb658 ~ 0x3fff2288, len: 27696
heap  : 0x3fff2288 ~ 0x3fffc000, len: 40312
mode : sta(dc:4f:22:82:f2:d3)
add if0
v=1
v=1
v=1
v=1
v=1
v=1
inactive
port=12, hi=1, save_before=0
supla_esp_gpio_set_hi 12, 1
supla_esp_gpio_set_hi 12, 1
scandone
state: 0 -> 2 (b0)
state: 2 -> 3 (0)
state: 3 -> 5 (10)
add 0
aid 10
cnt 

connected with serwisgch, channel 6
dhcp client start...
WiFi Status: 1
STATE WRITE SUCCESS
supla_esp_gpio_set_hi 13, 0
ip:192.168.20.129,mask:255.255.255.0,gw:192.168.20.1
supla_esp_gpio_set_hi 13, 1
WiFi Status: 5
IP Received
supla_esp_gpio_set_hi 13, 1
Resolv krissg.ovh
client handshake start.
client handshake ok!
devconn_connect_cb
supla_esp_gpio_set_hi 13, 0
supla_esp_gpio_set_hi 13, 1
supla_esp_gpio_set_hi 13, 0
Server connected
supla_esp_gpio_set_hi 13, 1
Registered and ready.
Free heap size: 23552
get_firmware_update_url
supla_esp_gpio_set_hi 13, 1
pm open,type:2 0
INTR
INTR(b) port=0
v=1
inactive
port=12, hi=0, save_before=0
supla_esp_gpio_set_hi 12, 0
supla_esp_gpio_set_hi 12, 0

 ets Jan  8 2013,rst cause:2, boot mode:(3,7)

load 0x40100000, len 1856, room 16 
tail 0
chksum 0x63
load 0x3ffe8000, len 776, room 8 
tail 0
chksum 0x02
load 0x3ffe8310, len 552, room 8 
tail 0
chksum 0x79
csum 0x79

2nd boot version : 1.5
  SPI Speed      : 40MHz
  SPI Mode       : DOUT
  SPI Flash Size & Map: 8Mbit(512KB+512KB)
jump to run user1 @ 1000

rf cal sector: 251
rf[112] : 00
rf[113] : 00
rf[114] : 01

SDK ver: 1.5.4.1(39cb9a32) compiled @ Jul  1 2016 20:04:35
phy ver: 972, pp ver: 10.1

RST reason: 6
CFG READ SUCCESS!
STATE READ SUCCESS!
gpio_init_delay
supla_esp_gpio_init
gpio_init_delay
relay init 12
RESTORE_FORCE, 0, 12, 1
port=12, hi=1, save_before=255
supla_esp_gpio_set_hi 12, 1
supla_esp_gpio_set_hi 12, 1
relay init 5
INTR
INTR(b) port=0
RESTORE_FORCE, 1, 5, 0
port=5, hi=0, save_before=255
supla_esp_gpio_set_hi 5, 0
supla_esp_gpio_set_hi 5, 0
input init 0
input init 9
INTR
INTR(b) port=0
gpio_init_delay
Starting 213556
Disconnected
supla_esp_gpio_set_hi 13, 1
data  : 0x3ffe8000 ~ 0x3ffe83c4, len: 964
rodata: 0x3ffe83d0 ~ 0x3ffeb658, len: 12936
bss   : 0x3ffeb658 ~ 0x3fff2288, len: 27696
heap  : 0x3fff2288 ~ 0x3fffc000, len: 40312
mode : sta(dc:4f:22:82:f2:d3)
add if0
v=1
v=1
v=1
v=1
v=1
v=1
inactive
port=12, hi=0, save_before=0
supla_esp_gpio_set_hi 12, 0
supla_esp_gpio_set_hi 12, 0
scandone
state: 0 -> 2 (b0)
state: 2 -> 3 (0)
state: 3 -> 5 (10)
add 0
aid 10
cnt 

connected with serwisgch, channel 6
dhcp client start...
WiFi Status: 1
STATE WRITE SUCCESS
supla_esp_gpio_set_hi 13, 0
ip:192.168.20.129,mask:255.255.255.0,gw:192.168.20.1
WiFi Status: 5
IP Received
supla_esp_gpio_set_hi 13, 1
Resolv krissg.ovh
client handshake start.
supla_esp_gpio_set_hi 13, 0
client handshake ok!
devconn_connect_cb
supla_esp_gpio_set_hi 13, 1
supla_esp_gpio_set_hi 13, 0
supla_esp_gpio_set_hi 13, 1
Server connected
supla_esp_gpio_set_hi 13, 1
Registered and ready.
Free heap size: 23672
get_firmware_update_url
supla_esp_gpio_set_hi 13, 1
pm open,type:2 0
INTR
INTR(b) port=0
v=1
inactive
port=12, hi=1, save_before=0
supla_esp_gpio_set_hi 12, 1
supla_esp_gpio_set_hi 12, 1

 ets Jan  8 2013,rst cause:2, boot mode:(3,6)

load 0x40100000, len 1856, room 16 
tail 0
chksum 0x63
load 0x3ffe8000, len 776, room 8 
tail 0
chksum 0x02
load 0x3ffe8310, len 552, room 8 
tail 0
chksum 0x79
csum 0x79

2nd boot version : 1.5
  SPI Speed      : 40MHz
  SPI Mode       : DOUT
  SPI Flash Size & Map: 8Mbit(512KB+512KB)
jump to run user1 @ 1000

rf cal sector: 251
rf[112] : 00
rf[113] : 00
rf[114] : 01

SDK ver: 1.5.4.1(39cb9a32) compiled @ Jul  1 2016 20:04:35
phy ver: 972, pp ver: 10.1

RST reason: 6
CFG READ SUCCESS!
STATE READ SUCCESS!
gpio_init_delay
supla_esp_gpio_init
gpio_init_delay
relay init 12
RESTORE_FORCE, 0, 12, 0
port=12, hi=0, save_before=255
supla_esp_gpio_set_hi 12, 0
supla_esp_gpio_set_hi 12, 0
relay init 5
INTR
INTR(b) port=0
RESTORE_FORCE, 1, 5, 0
port=5, hi=0, save_before=255
supla_esp_gpio_set_hi 5, 0
supla_esp_gpio_set_hi 5, 0
input init 0
input init 9
INTR
INTR(b) port=0
gpio_init_delay
Starting 213885
Disconnected
supla_esp_gpio_set_hi 13, 1
data  : 0x3ffe8000 ~ 0x3ffe83c4, len: 964
rodata: 0x3ffe83d0 ~ 0x3ffeb658, len: 12936
bss   : 0x3ffeb658 ~ 0x3fff2288, len: 27696
heap  : 0x3fff2288 ~ 0x3fffc000, len: 40312
mode : sta(dc:4f:22:82:f2:d3)
add if0
v=1
v=1
v=1
v=1
v=1
v=1
inactive
port=12, hi=1, save_before=0
supla_esp_gpio_set_hi 12, 1
supla_esp_gpio_set_hi 12, 1
scandone
state: 0 -> 2 (b0)
state: 2 -> 3 (0)
state: 3 -> 5 (10)
add 0
aid 10
cnt 

connected with serwisgch, channel 6
dhcp client start...
WiFi Status: 1
STATE WRITE SUCCESS
supla_esp_gpio_set_hi 13, 0
ip:192.168.20.129,mask:255.255.255.0,gw:192.168.20.1
WiFi Status: 5
IP Received
supla_esp_gpio_set_hi 13, 1
Resolv krissg.ovh
client handshake start.
client handshake ok!
devconn_connect_cb
supla_esp_gpio_set_hi 13, 0
supla_esp_gpio_set_hi 13, 1
Server connected
supla_esp_gpio_set_hi 13, 1
Registered and ready.
Free heap size: 23672
get_firmware_update_url
supla_esp_gpio_set_hi 13, 1
pm open,type:2 0
INTR
INTR(b) port=0
v=0
RESET cfg_counter = 0
v=0
v=0
v=0
INTR
INTR(b) port=0
v=1
INTR
INTR(b) port=0
v=0
RESET cfg_counter = 0
v=0
v=0
v=0
v=0
active
INTR
INTR(b) port=0
v=1
v=1
v=1
v=1
inactive
port=12, hi=0, save_before=0
supla_esp_gpio_set_hi 12, 0
supla_esp_gpio_set_hi 12, 0
STATE WRITE SUCCESS
User avatar
lesny8
Posts: 683
Joined: Mon Dec 11, 2017 9:43 pm

Fri Feb 15, 2019 7:17 pm

Kiedyś miałem problem z obsłużeniem GPIO0 jako CFG_BTN.
Trafiłem na to przypadkiem i do dziś tego nie rozumiem, ale jak w supla_esp_board_gpio_init ustawiłem GPIO5 na INPUT_TYPE_BTN_MONOSTABLE to obsługa GPIO0 jako CFG_BTN ruszyła

Code: Select all

supla_input_cfg[gpio_count].type = INPUT_TYPE_BTN_MONOSTABLE;
supla_input_cfg[gpio_count].gpio_id = 5;
gpio_count++;
kris.sg
Posts: 105
Joined: Mon Aug 07, 2017 8:08 pm
Location: Przezchlebie

Sat Feb 16, 2019 11:29 am

Dzięki @lesny8 za pomoc ale niestety nie pomogło
tzn obsługa gpio0 mi działa poprawnie, problem jest tylko przy uruchomieniu modułu pojawiają się wtedy zmiany stanu i przerwanie to wychwytuje, czyli tak jak bym wcisnął przycisk, na gpio10 jest ok.
dawałem przy starcie opóźnienie obsługi przerwań ale i tak na gpio0 pojawiały się zmiany stanu.
To się dzieje chwilę po uruchomieniu modułu, później gpio0 działa prawidłowo.
chcę to wyeliminować, ponieważ sonoff touch po uruchomieniu załącza mi światło sterowane tym wejściem, a chcę, żeby moduł ustawiał stan przed resetem, czyli jak jest wyłączone to tak ma zostać i tak to działa na gpio10, ale na gpio0 już nie.
Oczywiście flagę mam ustawioną:

Code: Select all

#define B_RELAY1_PORT    12
#define B_RELAY2_PORT     5
#define B_RELAY3_PORT     4

#define B_CFG_PORT        0
#define B_INPUT2_PORT     9
#define B_INPUT3_PORT    10


void supla_esp_board_set_device_name(char *buffer, uint8 buffer_size) {
		#if defined __BOARD_sonoff_touch_triple
			ets_snprintf(buffer, buffer_size, "SONOFF-TOUCH-TRIPLE");
		#elif defined __BOARD_sonoff_touch_dual
			ets_snprintf(buffer, buffer_size, "SONOFF-TOUCH-DUAL");
		#else
			ets_snprintf(buffer, buffer_size, "SONOFF-TOUCH");
		#endif
}


void supla_esp_board_gpio_init(void) {
		
	supla_input_cfg[0].type = INPUT_TYPE_BTN_MONOSTABLE;
	supla_input_cfg[0].gpio_id = B_CFG_PORT;
	supla_input_cfg[0].flags = INPUT_FLAG_PULLUP | INPUT_FLAG_CFG_BTN;
	supla_input_cfg[0].relay_gpio_id = B_RELAY1_PORT;
	supla_input_cfg[0].channel = 0;

    	supla_relay_cfg[0].gpio_id = B_RELAY1_PORT;
   	supla_relay_cfg[0].flags = RELAY_FLAG_RESTORE_FORCE;
    	supla_relay_cfg[0].channel = 0;

#ifdef __BOARD_sonoff_touch_dual

	supla_input_cfg[1].type = INPUT_TYPE_BTN_MONOSTABLE;
	supla_input_cfg[1].gpio_id = B_INPUT2_PORT;
	supla_input_cfg[1].flags = INPUT_FLAG_PULLUP;
	supla_input_cfg[1].relay_gpio_id = B_RELAY2_PORT;
	supla_input_cfg[1].channel = 1;

    	supla_relay_cfg[1].gpio_id = B_RELAY2_PORT;
    	supla_relay_cfg[1].flags = RELAY_FLAG_RESTORE_FORCE;
    	supla_relay_cfg[1].channel = 1;

#endif /*__BOARD_sonoff_touch_dual*/

#ifdef __BOARD_sonoff_touch_triple

	supla_input_cfg[1].type = INPUT_TYPE_BTN_MONOSTABLE;
	supla_input_cfg[1].gpio_id = B_INPUT2_PORT;
	supla_input_cfg[1].flags = INPUT_FLAG_PULLUP;
	supla_input_cfg[1].relay_gpio_id = B_RELAY2_PORT;
	supla_input_cfg[1].channel = 1;

    	supla_relay_cfg[1].gpio_id = B_RELAY2_PORT;
    	supla_relay_cfg[1].flags = RELAY_FLAG_RESTORE_FORCE;
    	supla_relay_cfg[1].channel = 1;

	supla_input_cfg[2].type = INPUT_TYPE_BTN_MONOSTABLE;
	supla_input_cfg[2].gpio_id = B_INPUT3_PORT;
	supla_input_cfg[2].flags = INPUT_FLAG_PULLUP;
	supla_input_cfg[2].relay_gpio_id = B_RELAY3_PORT;
	supla_input_cfg[2].channel = 2;

    	supla_relay_cfg[2].gpio_id = B_RELAY3_PORT;
    	supla_relay_cfg[2].flags = RELAY_FLAG_RESTORE_FORCE;
    	supla_relay_cfg[2].channel = 2;

#endif /*__BOARD_sonoff_touch_triple*/

}

void supla_esp_board_set_channels(TDS_SuplaDeviceChannel_B *channels, unsigned char *channel_count) {
	
#ifdef __BOARD_sonoff_touch

	*channel_count = 1;

	channels[0].Number = 0;
	channels[0].Type = SUPLA_CHANNELTYPE_RELAY;

	channels[0].FuncList = SUPLA_BIT_RELAYFUNC_POWERSWITCH \
								| SUPLA_BIT_RELAYFUNC_LIGHTSWITCH;

	channels[0].Default = SUPLA_CHANNELFNC_LIGHTSWITCH;
	channels[0].value[0] = supla_esp_gpio_relay_on(B_RELAY1_PORT);


	

#endif

#ifdef __BOARD_sonoff_touch_dual

	*channel_count = 2;

	channels[0].Number = 0;
	channels[0].Type = SUPLA_CHANNELTYPE_RELAY;

	channels[0].FuncList = SUPLA_BIT_RELAYFUNC_POWERSWITCH \
								| SUPLA_BIT_RELAYFUNC_LIGHTSWITCH;

	channels[0].Default = SUPLA_CHANNELFNC_LIGHTSWITCH;
	channels[0].value[0] = supla_esp_gpio_relay_on(B_RELAY1_PORT);

	channels[1].Number = 1;
	channels[1].Type = channels[0].Type;
	channels[1].FuncList = channels[0].FuncList;
	channels[1].Default = channels[0].Default;
	channels[1].value[0] = supla_esp_gpio_relay_on(B_RELAY2_PORT);

#endif

#ifdef __BOARD_sonoff_touch_triple

	*channel_count = 3;

	channels[0].Number = 0;
	channels[0].Type = SUPLA_CHANNELTYPE_RELAY;

	channels[0].FuncList = SUPLA_BIT_RELAYFUNC_POWERSWITCH \
								| SUPLA_BIT_RELAYFUNC_LIGHTSWITCH;

	channels[0].Default = SUPLA_CHANNELFNC_LIGHTSWITCH;
	channels[0].value[0] = supla_esp_gpio_relay_on(B_RELAY1_PORT);

	channels[1].Number = 1;
	channels[1].Type = channels[0].Type;
	channels[1].FuncList = channels[0].FuncList;
	channels[1].Default = channels[0].Default;
	channels[1].value[0] = supla_esp_gpio_relay_on(B_RELAY2_PORT);

	channels[2].Number = 2;
	channels[2].Type = channels[0].Type;
	channels[2].FuncList = channels[0].FuncList;
	channels[2].Default = channels[0].Default;
	channels[2].value[0] = supla_esp_gpio_relay_on(B_RELAY3_PORT);


#endif

}

void supla_esp_board_send_channel_values_with_delay(void *srpc) {

	supla_esp_channel_value_changed(0, supla_esp_gpio_relay_on(B_RELAY1_PORT));

#ifdef __BOARD_sonoff_touch_dual

	supla_esp_channel_value_changed(1, supla_esp_gpio_relay_on(B_RELAY2_PORT));

#endif

#ifdef __BOARD_sonoff_touch_triple

	supla_esp_channel_value_changed(1, supla_esp_gpio_relay_on(B_RELAY2_PORT));
	supla_esp_channel_value_changed(2, supla_esp_gpio_relay_on(B_RELAY3_PORT));

#endif
}
akir
Posts: 110
Joined: Wed Nov 07, 2018 7:17 pm

Sun Mar 03, 2019 8:56 am

Coś ruszyles z tematem?
kris.sg
Posts: 105
Joined: Mon Aug 07, 2017 8:08 pm
Location: Przezchlebie

Mon Mar 04, 2019 8:52 am

Nie udało mi się znaleźć rozwiązania, ale zrobiłem to w inny sposób:
input 1 przerobiłem z gpio0 na gpio14 i teraz działa prawidłowo, mało tego nie ma nawet "klekotania" jak moduł jest rozłączony.
rezystor R19 przestawiłem w drugę stronę i do jego wolnej nóżki dolutowałem kynar który idzie do esp na zdjęciu masz mniej więcej pokazane :
Attachments
68747470733a2f2f692e696d6775722e636f6d2f6c4539735343672e6a7067.jpg
68747470733a2f2f692e696d6775722e636f6d2f6c4539735343672e6a7067.jpg (603.02 KiB) Viewed 523 times
Post Reply