nano 33 iot Serial Port Outputs make unstable WiFi Connection
Nano 33 IoT 보드에서 타이머 인터럽트와 함께 Serial Port 출력을 자주 사용하는 것은 wifi 연결을 불안정하게, 그러니까 자주 연결을 끊어지게 만든다. 자세한 원인은 아직 확인중이라서 모르겠는데 테스트를 해보니 확실히 드러난다.
1초 주기마다 카운터를 증가시키는 타이머 인터럽트에서 씨리얼 모니터로 타이머 값을 프린트 하는 코드는 아래와 같다.
//Here Start Timer function
//this function gets called by the interrupt at <sampleRate>Hertz
void TC5_Handler (void) {
//YOUR CODE HERE
time_tick_onesecond++;
flag_300seconds++;
Serial.println(time_tick_onesecond);
// END OF YOUR CODE
TC5->COUNT16.INTFLAG.bit.MC0 = 1; //Writing a 1 to INTFLAG.bit.MC0 clears the interrupt so that it will run again
}
그리고 루프를 돌면서 wifi 연결을 검사하고 다시 연결하는 코드는 아래와 같다. 메인 루프에서 WL_CONNECTED를 검사하여 setup_wifi() 를 호출하는 코드를 동시에 나타내는 데 여하튼 WiFi가 끊어지면 잘 작동한다. wifi 가 새로 연결되면 바로 아래에서 mqtt 서버에 다시 연결하여 브로커를 등록하는 과정도 있다.
if(WiFi.status() != WL_CONNECTED)
{
setup_wifi();
Serial.print("reconnected times: ");
Serial.println(reconnectCounter);
//setup MQTT server
client.setServer(mqtt_server, 1883); // Wait----MQTT 서버에 연결합니다.
if(client.connect(machine_code, mqtt_username, mqtt_password)) //27second
{
client.subscribe("operate"); //20210520 insert
Serial.println("\tMQTT Connected");
}
client.setCallback(callback);
}
void setup_wifi()
{
int statusWiFi = WiFi.status();
// attempt to connect to Wifi network:
while ( statusWiFi != WL_CONNECTED) {
Serial.print("Attempting to connect to SSID: ");
Serial.println(ssid);
Serial.print("Status: ");
Serial.println(statusWiFi);
// Connect to WPA/WPA2 network. Change this line if using open or WEP network:
statusWiFi = WiFi.begin(ssid, pass);
reconnectCounter ++;
if( statusWiFi != WL_CONNECTED )
{
Serial.print("Connect Fail - call end() wait 5s status:");
Serial.println(statusWiFi);
Serial.print("Reason code: ");
Serial.println(WiFi.reasonCode());
// Connect was not successful... retry
WiFi.end();
delay( 5000 );
}
else
{
// Give it 1s connected...
delay( 1000 );
}
}
}
위와 같은 코드를 실행하면 재연결 횟수가 너무 많이 나온다. 연결이 끊겨 재 연결할 때 출력 메시지는 아래와 같다.
923
924
Attempting to connect to SSID: PISnet_032AC8
Status: 255
Connect Fail - call end() wait 5s status:4
Reason code: 1
925
926
927
928
Attempting to connect to SSID: PISnet_032AC8
Status: 4
929
930
931
932
933
934
935
936
937
reconnected times: 5
MQTT Connected
938
939
940
테스트 해보면 타이머 인터럽트에서 1초 카운터를 출력하는 코드를 제거하면 현저하게 재연결 횟수가 줄어들든가 아예 생기지 않는다. 코드를 다시 한 번 살펴보고 어떤 이유인지 분석해야 할 숙제다.

'개발자 > Arduino' 카테고리의 다른 글
| Nano 33 IoT HC-SR04 거리 센서 코드 (7) | 2021.10.09 |
|---|---|
| LPS22HB 압력 센서 아두이노 실습하기 (0) | 2021.10.06 |
| 아두이노를 활용한 스마트 기기 제어 시스템 개발 교육과정 (0) | 2021.09.08 |
| 아두이노 INA219 DC 전류 센서 사용하기 (0) | 2021.07.25 |
| Nano 33 IoT WiFi 연결 불안정을 해결하는 코드 (0) | 2021.05.20 |
| Arduino MQTT 사용자 ID와 password로 mqtt 브로커 연결 (0) | 2021.05.17 |
| 미세먼지 측정기 센서와 커넥터 연결 - Harness (0) | 2021.05.13 |
| How to prevent SSD1306 allocation failed error (0) | 2021.04.30 |
취업, 창업의 막막함, 외주 관리, 제품 부재!
당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약,
아이디어는 있지만 구현할 기술이 없는 막막함.
우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.
이제 고민을 멈추고, 캐어랩을 만나세요!
코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.
제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!
귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.
캐어랩