0
kevinlin

目前嘗試要將PM2.5等相關資料用MQTT送到LASS,但使用所提供MQTT範例時遇到以下問題

PS: 以下使用 Arduino IDE 1.8.1, ameba Library: 2.0.1

(1) 以下為使用所提供的MQTT範例

每隔60秒執行以下程式一次(有改過180執行以下程式一次),一樣有所提問題
// setup MQTT
client.setServer(server, 1883);
if (client.connect(device_id)) {
if (DBG) printf("Connected to MQTT %srn", server);
client.publish(topic, payload);
delay(500); // delay a little for waiting packet send out
} else {
resetEthernetShield();
}

(2) 問題

  • 當第一次或前2-3次使用MQTT時,可以正常傳送,出現以下訊息

Connect to Server successful!
Connected to MQTT gpssensor.ddns.net

 

  • 。但是之後就會出現以下錯誤訊息

Connected to MQTT gpssensor.ddns.net

RTL8195A[Driver]: sta recv deauth reason code(7) sta:50:67:f0:48:c2:e2

或同時連續好幾個一樣的錯誤訊息

RTL8195A[Driver]: sta recv deauth reason code(7) sta:50:67:f0:48:c2:e2

RTL8195A[Driver]: sta recv deauth reason code(7) sta:50:67:f0:48:c2:e2

RTL8195A[Driver]: sta recv deauth reason code(7) sta:50:67:f0:48:c2:e2

(PS:之前好像有人提出 sta recv deauth reason code(7) sta:50:67:f0:48:c2:e2問題,回覆是 MQTT Server斷線)

  • 有時會出現

Connect to Server failed!

應該是

if (client.connect(device_id))

被測試到所致

 

(3) 目前解決方式是每傳輸3次就reset 整個wifi 板, 然後也許之後2-3次可以正常,或者繼續有問題,然後繼續 reset.

或者

if (client.connect(device_id))

else

{

被測試時就reset wifi  板,以下為reset code

resetEthernetShield();

}

void resetEthernetShield()
{
Serial.println("Resetting WebSock.");
wifiClient.stop();
delay(1000);

Serial.print("Attempting to connect to SSID: ");
Serial.println(ssid);
// Connect to WPA/WPA2 network. Change this line if using open or WEP network:
status = WiFi.begin(ssid, pass);

// wait 10 seconds for connection:
delay(10000);

if ( status != WL_CONNECTED)
Serial.println("Attempting to connect to SSID Fail. ");
else
Serial.println("Attempting to connect to SSID OK. ");

}

 

(4) 由於看目前Ameba提供的範例是setup run 一次,然後進入watch dog 模式,這好像不是最適合的使用方式,是否使用MQTT 有時麼狀況? 是否有什麼方式可以解決 ?

Mas Chen 回答了