제대로 작동하는 GSM 모듈용 소형 Arduino 라이브러리입니다.
TinyGSM이 마음에 드신다면 별표를 주거나 포크해서 기여해 주세요!
다음 채팅에 참여할 수도 있습니다.
이 라이브러리는 이더넷이나 WiFi를 사용하는 많은 스케치와 쉽게 통합됩니다. PubSubClient (MQTT) , Blynk , HTTP 클라이언트 및 파일 다운로드 예제가 제공됩니다.
Arduino Uno의 전체 WebClient 예제(소프트웨어 직렬을 통해)는 리소스를 거의 사용하지 않습니다.
Sketch uses 15022 bytes (46%) of program storage space. Maximum is 32256 bytes.
Global variables use 574 bytes (28%) of dynamic memory, leaving 1474 bytes for local variables. Maximum is 2048 bytes.
Arduino GSM 라이브러리는 유사한 시나리오에서 15868바이트(49%)의 플래시와 1113바이트(54%)의 RAM을 사용합니다. TinyGSM은 또한 (가능한 경우) 모뎀에서 부드럽게 데이터를 가져오므로 아주 작은 RAM에서도 작동할 수 있습니다. 이제 실험을 위한 더 많은 공간이 생겼습니다.
새로운 업데이트를 보려면 이 저장소를 시청하세요! 물론 기여도 환영합니다 ;)
데이터 연결
USSD
SMS
음성 통화
위치
크레딧
AT
명령을 보내십시오.코드의 일반적인 흐름은 다음과 같아야 합니다.
#define TINY_GSM_MODEM_SIM800
#include
TinyGsm modem(SerialAT);
TinyGsmClient client(modem);
또는 TinyGsmClientSecure client(modem);
(지원되는 모듈에서)TinyGsmClient clientX(modem, 0);
, TinyGsmClient clientY(modem, 1);
, 등 또는TinyGsmClientSecure clientX(modem, 0);
, TinyGsmClientSecure clientY(modem, 1);
, 등modem.init()
또는 modem.restart()
modem.simUnlock(GSM_PIN)
modem.networkConnect(wifiSSID, wifiPass)
modem.waitForNetwork(600000L)
modem.gprsConnect(apn, gprsUser, gprsPass)
(또는 간단히 modem.gprsConnect(apn)
)client.connect(server, port)
많은 GSM 모뎀, WiFi 및 무선 모듈은 직렬을 통해 AT 명령을 전송하여 제어할 수 있습니다. TinyGSM은 보낼 명령과 AT 응답을 처리하는 방법을 알고 있으며 이를 표준 Arduino 클라이언트 인터페이스로 래핑합니다.
이 라이브러리는 모든 통신을 "차단"하고 있습니다. 함수에 따라 모듈 응답을 기다리는 동안 코드가 차단될 수 있습니다. 명백한 것(예: waitForNetwork()
) 외에도 여러 다른 함수가 최대 몇 분 동안 코드를 차단할 수 있습니다. gprsConnect()
및 client.connect()
함수는 일반적으로 특히 열악한 서비스 지역에서 가장 오랫동안 차단합니다. 모듈 종료 및 재시작도 상당히 느릴 수 있습니다.
이 라이브러리는 모듈에 대한 어떤 종류의 "하드웨어" 또는 핀 레벨 제어도 지원 하지 않습니다 . 일종의 High/Low/High 핀 시퀀스를 사용하여 모듈을 켜거나 재설정해야 하는 경우 해당 기능을 직접 작성해야 합니다.
GPRS 데이터 스트림의 경우 이 라이브러리는 표준 Arduino 클라이언트 인터페이스를 제공합니다. 추가 기능에 대해서는 이 예시 스케치를 참조하세요.
대부분의 모듈은 네트워크에 제대로 연결하려면 최대 2A가 필요합니다. 이는 "표준" USB가 제공하는 것의 4배입니다! 실제로 전원 공급 장치를 개선하면 많은 경우 안정성 문제가 해결됩니다!
대부분의 모듈은 모듈이 수신하는 것과 일치하도록 전송 속도를 조정하려고 시도하는 일종의 "자동 전송" 기능을 지원합니다. TinyGSM은 또한 자체 자동 전송 기능( TinyGsmAutoBaud(SerialAT, GSM_AUTOBAUD_MIN, GSM_AUTOBAUD_MAX);
)을 구현합니다. 처음에 모듈에 연결하고 테스트를 수행할 때 매우 유용하지만 어떤 종류의 프로덕션 코드에서도 사용해서는 안 됩니다. 모듈과의 통신을 설정한 후에는 setBaud(#)
함수를 사용하여 전송 속도를 설정하고 해당 속도를 유지하십시오.
때때로(특히 AT 명령을 사용하여 플레이한 경우) 모듈 구성이 유효하지 않게 될 수 있습니다. 이로 인해 다음과 같은 문제가 발생할 수 있습니다.
모듈을 Factory Defaults 로 되돌리려면 다음 스케치를 사용하십시오: File -> 예제 -> TinyGSM -> tools -> FactoryReset
경우에 따라 셀룰러 네트워크에 연결하기 위해 초기 APN을 설정해야 할 수도 있습니다. 네트워크에 등록할 수 없는 경우 gprsConnect(APN)
기능을 사용하여 초기 APN을 설정해 보세요. 등록 후 APN을 다시 설정해야 할 수도 있습니다. (대부분의 경우 등록 후 APN을 설정해야 합니다.)
새 SIM 카드, 새 모듈 또는 새 위치/타워와의 첫 번째 연결에는 오랜 시간이 걸릴 수 있습니다. 특히 신호 품질이 좋지 않은 경우 최대 15분 이상 걸릴 수 있습니다. 처음 연결하는 경우에는 대기 시간을 조정하고 기다리는 동안 점심을 먹으러 가야 할 수도 있습니다.
TCP 연결을 열 수 있지만 데이터를 수신하기 전에 연결을 닫는 경우 요청에 연결 유지 헤더를 추가해 보세요. 일부 모듈(예: SSL 모드의 SIM7000)은 원격 서버가 연결을 닫을 때 읽지 않은 데이터를 즉시 버립니다. 때로는 데이터가 처음에 도착했다는 알림도 제공하지 않는 경우도 있습니다. MQTT를 사용할 때 지속적인 연결을 유지하려면 연결 유지 간격(PINGREQ/PINGRESP)을 줄여야 할 수도 있습니다.
이 스케치를 사용하면 SIM 카드 및 GPRS 연결 문제를 진단하는 데 도움이 됩니다. 파일 -> 예제 -> TinyGSM -> 도구 -> 진단
진단이 실패하면 이 줄의 주석 처리를 제거하여 라이브러리에서 일부 디버깅 주석을 출력합니다.
# define TINY_GSM_DEBUG SerialMon
모든 사용자 정의 코드에서는 TinyGSM 라이브러리를 포함하기 전에 TINY_GSM_DEBUG
정의해야 합니다.
라이브러리 디버깅에서 명백한 오류를 볼 수 없는 경우 StreamDebugger를 사용하여 전체 AT 명령 시퀀스를 기본 직렬 포트에 복사하세요. 진단 예제에서는 다음 줄의 주석 처리를 제거하면 됩니다.
# define DUMP_AT_COMMANDS
사용자 정의 코드에서 다음 코드 조각을 추가할 수 있습니다.
# ifdef DUMP_AT_COMMANDS
# include < StreamDebugger.h >
StreamDebugger debugger (SerialAT, SerialMon);
TinyGsm modem (debugger);
# else
TinyGsm modem (SerialAT);
# endif
이 라이브러리는 서버에 대한 TCP(또는 SSL) 연결을 엽니다. OSI 모델에서는 계층 4(또는 SSL의 경우 5)입니다. HTTP(GET/POST), MQTT 및 사용하려는 기타 대부분의 기능은 레이어 7에서 실행됩니다. 즉, 이를 수행하려면 최상위 레이어를 수동으로 코딩하거나 다른 라이브러리(예: HTTPClient 또는 PubSubClient)를 사용해야 함을 의미합니다. 당신을 위한 것입니다. PostMan과 같은 도구는 TinyGSM과 같은 레이어 4/5가 아닌 레이어 7도 표시합니다. 서버에 성공적으로 연결했지만 "잘못된 요청"(또는 응답 없음)이라는 응답을 받은 경우 형식 문제일 가능성이 높습니다. 다음은 계층 7(특히 HTTP 요청)을 수동으로 작성하기 위한 몇 가지 팁입니다.
client.write("...")
client.print("...")
또는 client.write(buf, #)
또는 심지어 client.write(String("..."))
사용하십시오. 텍스트가 한 번에 한 문자씩 전송되는 것을 방지합니다(타자기 스타일).client.print(String( " GET " ) + resource + " HTTP/1.1 rn " );
client.print( " GET " );
client.print(resource);
client.println( " HTTP/1.1 " )
client.print("....rnrn")
에 두 줄을 추가하거나 추가 client.println()
추가하세요. SoftwareSerial
(Uno, Nano 등)을 사용하는 경우 115200 속도가 작동하지 않을 수 있습니다. 57600 , 38400 또는 그보다 낮은 값(귀하에게 가장 적합한 값)을 선택해 보십시오. 어떤 경우에는 9600 이 불안정하지만 38400을 사용하면 도움이 됩니다. 스케치에서 올바른 TX/RX 핀을 설정하십시오. 모든 Arduino 핀이 TX 또는 RX 핀 역할을 할 수 있는 것은 아닙니다. 여기와 여기에서 SoftSerial 옵션 및 구성에 대해 자세히 알아보세요.
ESP32 HardwareSerial
사용하는 경우 .begin()
호출에 추가 매개변수를 지정해야 할 수도 있습니다. 이 댓글을 참고해주세요.
ESP32 코어 1.0.2를 사용하면 HttpClient 또는 HttpsClient 예제를 컴파일할 수 없습니다. 1.0.3으로 업그레이드하거나 버전 1.0.1로 다운그레이드하거나 WebClient 예제를 사용하세요.
SAMD21 기반 보드를 사용하는 경우 Serial1
대신 sercom uart 포트를 사용해야 할 수도 있습니다. 이 댓글을 참고해주세요.
Goouuu Tech IOT-GA6 은 AI-Thinker A6 와 동일하지 않은 것으로 나타났습니다. 불행히도 IOT-GA6은 아직 기본적으로 지원되지 않습니다. IOT-GA6 펌웨어가 A6과 일치하도록 업데이트될 수 있다는 몇 가지 힌트가 있습니다... 이 항목을 참조하세요.
전부는 아니지만 일부 SIM800 버전은 SSL을 지원합니다. SSL 지원 여부는 펌웨어 버전과 개별 모듈에 따라 다릅니다. 사용자는 외관상 동일한 펌웨어를 사용하더라도 SIM800에서 SSL을 사용하여 다양한 수준의 성공을 거두었습니다. SSL이 필요하지만 SIM800에서 작동하지 않는 것 같으면 다른 모듈을 시도하거나 보조 SSL 라이브러리를 사용해 보십시오.
SIM7000 코드에는 두 가지 버전이 있습니다. 하나는 TINY_GSM_MODEM_SIM7000
사용하고 다른 하나는 TINY_GSM_MODEM_SIM7000SSL
을 사용합니다. TINY_GSM_MODEM_SIM7000
버전은 SSL을 지원하지 않지만 최대 8개의 동시 연결을 지원합니다. TINY_GSM_MODEM_SIM7000SSL
버전은 최대 2개의 동시 연결로 SSL 과 비보안 연결을 모두 지원합니다. 그렇다면 왜 두 가지 버전이 있습니까? "SSL" 버전은 SIM7000의 "응용 프로그램" 명령을 사용하고 다른 버전은 "TCP-IP 툴킷"을 사용합니다. 지역/펌웨어에 따라 둘 중 하나가 작동하지 않을 수 있습니다. 둘 다 시도해보고 더 안정적인 것을 사용하십시오. SSL이 필요하지 않은 경우 TINY_GSM_MODEM_SIM7000
으로 시작하는 것이 좋습니다.
이 프로젝트는 GNU Lesser General Public License(LGPL-3.0)에 따라 배포됩니다.