Skip to content

Nodemcu have an exception when change http fingerprint to communication with https #3259

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
xang555 opened this issue May 18, 2017 · 1 comment

Comments

@xang555
Copy link

xang555 commented May 18, 2017

Basic Infos

Hardware

Hardware: Nodemcu v0.9

Description

when i using firebase-arduino for get data from firebase database and after that. i'm send data to my api by using ESP8266HTTPClient. nodemcu have an exception, I think this exception maybe happen from i'm change http fingerprint for communication with my api that using https because when i using http. nodemcu don't have any exception.

Settings in IDE

Module: Nodemcu 0.9 (ESP-12 Modulue)
Flash Size: 4MB/3MB
CPU Frequency: 80Mhz
Upload Using: SERIAL

Sketch

some my code

#include <Arduino.h>

void setup() {

Serial.begin(250000);
//set pin mode
pinMode(SETTING_MODE,INPUT);
pinMode(STATE_CONNECTION,OUTPUT);
pinMode(gas_sensor, INPUT); //Set gas sensor as input

}

void loop() {

  static uint8_t state = 0;

  switch(state) {

  case 0 :
    Serial.println("check Mode");
    checkMode(state); //check mode
  break;

  case 1 :
    //auto connect wifi and firebase
    Serial.println("auto connect wifi and firebase");
   state = AutoConnectWifiAndFirebase();


  break;

  case 2 :
  //connect wifi
     Serial.println("connect wifi and firebase");
     state = ConnectwifiAndFirebase();

  break;

  case 3 :
  //handle with firebase
   Serial.println("handle firebase");
   handleFirebaseController(state);

  break;

  default :
  state = 0;

  }

  delay(500);

}


void handleFirebaseController (uint8_t& state) {

while (true) {

  if (isEnterOfflineMode()) {
      state = 0 ;
      return;
  }

  AnswerUplink();  
  handleGasSensor(); // send sensor value to Firebase
  checkConnection(); //check connection
  delay(100);

}

} // handle working in Firebase


void AnswerUplink() {

static uint8_t uplink = 0;
uint8_t state_uplink= Firebase.getInt(uplink_path);

// handle error
if (Firebase.failed()) {
    Serial.print("get status uplink failed:");
    Serial.println(Firebase.error());
    count_connection_lose++;
    return;
}

if (state_uplink != uplink) {
uint8_t ack = state_uplink;
Firebase.setInt(ack_path,ack);
// handle error
if (Firebase.failed()) {
    Serial.print("set status ack failed:");
    Serial.println(Firebase.error());
    count_connection_lose++;
    return;
}

uplink = state_uplink;

}

} // check if have uplink signal


void handleGasSensor() {

  double ppm = getSensorValue();
  Serial.println(ppm);
 static int repeatTime = 0;
 static bool isNotify = false;

  if (ppm > 2000) {

    if (repeatTime > 100) {
      isNotify = false;
    }

    if (!isNotify) {
        AlertNotification(); //send fcm
        isNotify = true;
    }

    repeatTime ++;

  }

} //handle Sensor

void AlertNotification() {

      http.begin(fcm_server,"A3 41 68 37 4D 94 36 8D 01 2C 68 49 05 58 D2 CC 0E 0B DE F4"); // url test server api
      http.addHeader("Content-Type", "application/x-www-form-urlencoded");
      http.addHeader("Authorization", fcm_server_key);
      String payload = "sdid="+DEVICE_ID;
      int httpCode =  http.sendRequest("POST",payload);

  if (httpCode > 0 ) {

  if (httpCode == HTTP_CODE_OK) {
     Serial.println(http.getString());
   }else{
     Serial.printf("[HTTP] POST... failed, error: %s\n", http.errorToString(httpCode).c_str());
   }

   http.end();

 }else {
   count_connection_lose++;
 }


} //alert notification


double getSensorValue(){

  float sensor_volt; //Define variable for sensor voltage
  float RS_gas; //Define variable for sensor resistance
  float ratio; //Define variable for ratio
  float sensorValue = analogRead(gas_sensor); //Read analog values of sensor

  sensor_volt = sensorValue * (5.0 / 1024.0); //Convert average to voltage
  RS_gas = ((5.0 * 20.0) / sensor_volt) - 20.0; //Calculate RS in fresh air
  ratio = RS_gas / R0;   // Get ratio RS_gas/RS_air

  double ppm_log = (log10(ratio) - b) / m; //Get ppm value in linear scale according to the the ratio value
  double ppm = pow(10, ppm_log); //Convert ppm value to log scale
  //double percentage = ppm / 10000; //Convert to percentage

  return ppm;

} // get gass sensor

nodemcu have an exception when ran in this statement

......

AlertNotification(); //send fcm

.....

void AlertNotification() {

      http.begin(fcm_server,"A3 89 90 37 4D 94 36 8D 01 2C 68 49 05 58 D2 CC 0E 0B DE F4"); // url test server api
      http.addHeader("Content-Type", "application/x-www-form-urlencoded");
      http.addHeader("Authorization", fcm_server_key);
      String payload = "sdid="+DEVICE_ID;
      int httpCode =  http.sendRequest("POST",payload);

  if (httpCode > 0 ) {

  if (httpCode == HTTP_CODE_OK) {
     Serial.println(http.getString());
   }else{
     Serial.printf("[HTTP] POST... failed, error: %s\n", http.errorToString(httpCode).c_str());
   }

   http.end();

 }else {
   count_connection_lose++;
 }

} //alert notification

Debug Messages

Exception (29):
epc1=0x4000df64 epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000000 depc=0x00000000

ctx: cont 
sp: 3fff1fc0 end: 3fff2470 offset: 01a0

>>>stack>>>
3fff2160:  00000080 3fff5914 3fffb15c 4022c1c4  
3fff2170:  3fffba6c 3fff5914 3fffb15c 4022cbb1  
3fff2180:  3fff7004 19c41f67 f00f3c34 00000020  
3fff2190:  3fffa19c 3fff5914 3fff9d9c 00000020  
3fff21a0:  3fffa19c 3fff5914 00000010 4022ceb0  
3fff21b0:  3fff36ac 3fff7034 3fff9d9c 00000001  
3fff21c0:  00000001 3fff9d9c 3fff790d 4022bc88  
3fff21d0:  00000200 3fff6fd4 3fff7787 00000000  
3fff21e0:  00000200 3fff6fd4 3fff7787 4022deb1  
3fff21f0:  3fff2220 00000000 000001d0 00000030  
3fff2200:  eeff0328 07859941 1a3d6898 00000004  
3fff2210:  00000004 3fff76c4 3fff7781 40229fbc  
3fff2220:  7c2e0203 ad010691 41178fbf 3bc9d677  
3fff2230:  cda0a69f 34d97fb7 eb7324bd 87740707  
3fff2240:  65fbed34 96646a5b fa433f60 0328ff58  
3fff2250:  00000004 3fff7781 3fff76c4 4022a3bd  
3fff2260:  e7d8ad06 081f1987 87f287cc 3fff3664  
3fff2270:  00000000 00000004 00000004 40203edb  
3fff2280:  3fff7785 3fff7781 3fff926c 00000a40  
3fff2290:  00000abb 3fff8224 00000017 00000004  
3fff22a0:  3fff76c4 3fff7781 00000004 00000004  
3fff22b0:  00000004 3fff7781 3fff76c4 40229db4  
3fff22c0:  00000000 3fff7781 3fff76c4 4022a15c  
3fff22d0:  00000018 3fff3c34 00000019 401004d8  
3fff22e0:  3fff2330 0000000e 00000010 00000000  
3fff22f0:  3fff39c4 3fff3c34 3fff76c4 01000000  
3fff2300:  3fff2330 3fff3b44 3fff76c4 40229f0c  
3fff2310:  40203cec 000008d0 3fff1450 00001387  
3fff2320:  00002ad0 3fff3b44 3fff35cc 4020437d  
3fff2330:  000001bb 3fff583c 3fff3b44 40203712  
3fff2340:  1c19d067 00000000 3fff2380 3fff62dc  
3fff2350:  000001bb 3fff3b44 3fff3c34 402046d1  
3fff2360:  3ffe9ee8 1c19d067 3ffe9ee8 1c19d067  
3fff2370:  3fffdad0 00000000 3fff0884 40209358  
3fff2380:  00000000 00000b40 00000168 00000168  
3fff2390:  00000000 00000012 3fff0884 40209b28  
3fff23a0:  00000020 3fff2400 3fff2400 4020a7fc  
3fff23b0:  3fff3b1c 00000012 3fff2400 4020a84b  
3fff23c0:  3ffe91dc 000006a9 3fff2400 4020a87d  
3fff23d0:  3fffdad0 3fff087c 3fff2400 3fff1448  
3fff23e0:  3fffdad0 3fff087c 3fff0884 40209bd6  
3fff23f0:  3fffdad0 3fff087c 3fff0884 402028f3  
3fff2400:  3fff62dc 0000001f 00000012 3fff3b1c  
3fff2410:  0000001f 00000012 3fff1448 4020a5d0  
3fff2420:  3fffdad0 3fff087c 3fff0878 40202aa1  
3fff2430:  3fffdad0 00000000 3fff0881 40202aff  
3fff2440:  00000000 00000000 3fff0881 40202b82  
3fff2450:  3fffdad0 00000000 3fff1441 4020b3f4  
3fff2460:  feefeffe feefeffe 3fff1450 40100718  
<<<stack<<<

decode this Exception

Decoding 29 results
0x4022c1c4: bi_clone at /Users/igrokhotkov/e/axtls/e1/crypto/bigint.c line 265
0x4022cbb1: bi_barrett at /Users/igrokhotkov/e/axtls/e1/crypto/bigint.c line 1285
0x4022ceb0: precompute_slide_window at /Users/igrokhotkov/e/axtls/e1/crypto/bigint.c line 1323
:  (inlined by) bi_mod_power at /Users/igrokhotkov/e/axtls/e1/crypto/bigint.c line 1372
0x4022bc88: trim at /Users/igrokhotkov/e/axtls/e1/crypto/bigint.c line 1197
0x4022deb1: RSA_public at /Users/igrokhotkov/e/axtls/e1/crypto/rsa.c line 242
:  (inlined by) RSA_encrypt at /Users/igrokhotkov/e/axtls/e1/crypto/rsa.c line 276
0x40229fbc: send_client_key_xchg at /Users/igrokhotkov/e/axtls/e1/ssl/tls1_clnt.c line 352
0x4022a3bd: do_clnt_handshake at /Users/igrokhotkov/e/axtls/e1/ssl/tls1_clnt.c line 109
0x40203edb: ClientContext::_consume(unsigned int) at C:\Users\xang\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\ESP8266WiFi\src/WiFiClientSecure.cpp line 517
:  (inlined by) ClientContext::read(char*, unsigned int) at C:\Users\xang\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\ESP8266WiFi\src\include/ClientContext.h line 175
0x40229db4: do_handshake at /Users/igrokhotkov/e/axtls/e1/ssl/tls1.c line 1481
:  (inlined by) basic_read at /Users/igrokhotkov/e/axtls/e1/ssl/tls1.c line 1357
0x4022a15c: do_client_connect at /Users/igrokhotkov/e/axtls/e1/ssl/tls1_clnt.c line 154
0x401004d8: malloc at C:\Users\xang\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266\umm_malloc/umm_malloc.c line 1664
0x40229f0c: ssl_read at /Users/igrokhotkov/e/axtls/e1/ssl/tls1.c line 265
0x40203cec: WiFiClient::_s_connected(void*, void*, signed char) at C:\Users\xang\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\ESP8266WiFi\src/WiFiClient.cpp line 149
0x4020437d: SSLContext::connect(ClientContext*, char const*, unsigned int) at C:\Users\xang\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\ESP8266WiFi\src/WiFiClientSecure.cpp line 517
:  (inlined by) WiFiClientSecure::_connectSSL(char const*) at C:\Users\xang\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\ESP8266WiFi\src/WiFiClientSecure.cpp line 279
0x40203712: WiFiClient::connect(IPAddress, unsigned short) at C:\Users\xang\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\ESP8266WiFi\src/WiFiClient.cpp line 149
0x402046d1: WiFiClientSecure::connect(char const*, unsigned short) at C:\Users\xang\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\ESP8266WiFi\src/WiFiClientSecure.cpp line 269
0x40209358: HTTPClient::connect() at C:\Users\xang\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\ESP8266HTTPClient\src/ESP8266HTTPClient.cpp line 197
0x40209b28: HTTPClient::sendRequest(char const*, unsigned char*, unsigned int) at C:\Users\xang\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\ESP8266HTTPClient\src/ESP8266HTTPClient.cpp line 197
0x4020a7fc: String::changeBuffer(unsigned int) at C:\Users\xang\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266/WString.cpp line 720
0x4020a84b: String::reserve(unsigned int) at C:\Users\xang\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266/WString.cpp line 720
0x4020a87d: String::copy(char const*, unsigned int) at C:\Users\xang\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266/WString.cpp line 720
0x40209bd6: HTTPClient::sendRequest(char const*, String) at C:\Users\xang\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\ESP8266HTTPClient\src/ESP8266HTTPClient.cpp line 197
0x402028f3: AlertNotification() at C:\Users\xang\Desktop\GassSensor/GassSensor.ino line 355
0x4020a5d0: Print::println(double, int) at C:\Users\xang\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266/Print.cpp line 76
0x40202aa1: handleGasSensor() at C:\Users\xang\Desktop\GassSensor/GassSensor.ino line 340
0x40202aff: handleFirebaseController(unsigned char&) at C:\Users\xang\Desktop\GassSensor/GassSensor.ino line 286
0x40202b82: loop at C:\Users\xang\Desktop\GassSensor/GassSensor.ino line 87
0x4020b3f4: loop_wrapper at C:\Users\xang\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266/core_esp8266_main.cpp line 56
0x40100718: cont_norm at C:\Users\xang\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266/cont.S line 109

i wish you have sufficient information about my problem, and understand my post

@igrr
Copy link
Member

igrr commented May 20, 2017

This issue is tracked in #2201.

@igrr igrr closed this as completed May 20, 2017
@igrr igrr added the duplicate label May 20, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants