Perpustakaan Arduino kecil untuk modul GSM, yang berfungsi.
Jika Anda menyukai TinyGSM - beri bintang, atau potong dan berkontribusi!
Anda juga dapat bergabung dalam obrolan kami:
Perpustakaan ini mudah diintegrasikan dengan banyak sketsa yang menggunakan Ethernet atau WiFi. Contoh PubSubClient (MQTT) , Blynk , HTTP Client dan File Download disediakan.
Contoh WebClient lengkap untuk Arduino Uno (melalui Software Serial) membutuhkan sedikit sumber daya:
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.
Pustaka Arduino GSM menggunakan 15868 byte (49%) Flash dan 1113 byte (54%) RAM dalam skenario serupa. TinyGSM juga menarik data secara perlahan dari modem (jika memungkinkan), sehingga dapat beroperasi dengan RAM yang sangat sedikit. Sekarang, Anda memiliki lebih banyak ruang untuk eksperimen.
Tonton repo ini untuk pembaruan baru! Dan tentu saja, kontribusinya diterima ;)
Koneksi data
USSD
SMS
Panggilan Suara
Lokasi
Kredit
AT
menggunakan sketsa iniAlur umum kode Anda harus seperti ini:
#define TINY_GSM_MODEM_SIM800
#include
TinyGsm modem(SerialAT);
TinyGsmClient client(modem);
atau TinyGsmClientSecure client(modem);
(pada modul yang didukung)TinyGsmClient clientX(modem, 0);
, TinyGsmClient clientY(modem, 1);
, dll atauTinyGsmClientSecure clientX(modem, 0);
, TinyGsmClientSecure clientY(modem, 1);
, dllmodem.init()
atau modem.restart()
modem.simUnlock(GSM_PIN)
modem.networkConnect(wifiSSID, wifiPass)
modem.waitForNetwork(600000L)
modem.gprsConnect(apn, gprsUser, gprsPass)
(atau sederhananya modem.gprsConnect(apn)
)client.connect(server, port)
Banyak modem GSM, WiFi dan modul radio dapat dikontrol dengan mengirimkan perintah AT melalui Serial. TinyGSM mengetahui perintah mana yang harus dikirim, dan cara menangani respons AT, dan menggabungkannya ke dalam antarmuka Klien Arduino standar.
Perpustakaan ini "memblokir" semua komunikasinya. Tergantung pada fungsinya, kode Anda mungkin diblokir untuk waktu yang lama menunggu tanggapan modul. Selain yang sudah jelas (yaitu, waitForNetwork()
) beberapa fungsi lain mungkin memblokir kode Anda hingga beberapa menit . Fungsi gprsConnect()
dan client.connect()
biasanya memblokir paling lama, terutama di wilayah layanan yang lebih buruk. Mematikan dan memulai ulang modul mungkin juga cukup lambat.
Perpustakaan ini tidak mendukung segala jenis "perangkat keras" atau kontrol level pin untuk modul. Jika Anda perlu menghidupkan atau mereset modul menggunakan semacam rangkaian pin Tinggi/Rendah/Tinggi, Anda harus menulis sendiri fungsi tersebut.
Untuk aliran data GPRS, perpustakaan ini menyediakan antarmuka Klien Arduino standar. Untuk fungsi tambahan, silakan lihat contoh sketsa ini
Sebagian besar modul memerlukan sebanyak 2A untuk terhubung dengan benar ke jaringan. Ini 4x lipat dari apa yang disediakan oleh USB "standar"! Meningkatkan pasokan listrik sebenarnya memecahkan masalah stabilitas dalam banyak kasus!
Sebagian besar modul mendukung semacam fitur "bauding otomatis" di mana modul akan mencoba menyesuaikan baud rate-nya agar sesuai dengan apa yang diterimanya. TinyGSM juga mengimplementasikan fungsi bauding otomatisnya sendiri ( TinyGsmAutoBaud(SerialAT, GSM_AUTOBAUD_MIN, GSM_AUTOBAUD_MAX);
). Meskipun sangat berguna saat pertama kali menghubungkan ke modul dan melakukan pengujian, ini TIDAK boleh digunakan dalam kode produksi apa pun. Setelah Anda menjalin komunikasi dengan modul, atur baud rate menggunakan fungsi setBaud(#)
dan tetap gunakan rate tersebut.
Terkadang (terutama jika Anda bermain dengan perintah AT), konfigurasi modul Anda mungkin menjadi tidak valid. Hal ini dapat mengakibatkan masalah seperti:
Untuk mengembalikan modul ke Default Pabrik , gunakan sketsa ini: File -> Contoh -> TinyGSM -> alat -> FactoryReset
Dalam beberapa kasus, Anda mungkin perlu menyetel APN awal untuk menyambung ke jaringan seluler. Coba gunakan fungsi gprsConnect(APN)
untuk mengatur APN awal jika Anda tidak dapat mendaftar di jaringan. Anda mungkin perlu mengatur APN lagi setelah mendaftar. (Dalam kebanyakan kasus, Anda harus mengatur APN setelah pendaftaran.)
Sambungan pertama dengan kartu SIM baru, modul baru, atau di lokasi/menara baru mungkin memerlukan waktu LAMA - hingga 15 menit atau bahkan lebih, terutama jika kualitas sinyalnya kurang bagus. Jika ini adalah koneksi pertama Anda, Anda mungkin perlu menyesuaikan waktu tunggu dan mungkin pergi makan siang sambil menunggu.
Jika Anda dapat membuka koneksi TCP tetapi menutup koneksi sebelum menerima data, coba tambahkan header keep-alive ke permintaan Anda. Beberapa modul (yaitu, SIM7000 dalam mode SSL) akan segera membuang data yang belum dibaca ketika server jarak jauh menutup koneksi - terkadang bahkan tanpa memberikan pemberitahuan bahwa data sudah tiba. Saat menggunakan MQTT, untuk menjaga koneksi berkelanjutan Anda mungkin perlu mengurangi interval tetap hidup (PINGREQ/PINGRESP).
Gunakan sketsa ini untuk membantu mendiagnosis masalah kartu SIM dan koneksi GPRS: File -> Contoh -> TinyGSM -> alat -> Diagnostik
Jika diagnostik gagal, batalkan komentar pada baris ini untuk menampilkan beberapa komentar debug dari perpustakaan:
# define TINY_GSM_DEBUG SerialMon
Dalam kode khusus apa pun, TINY_GSM_DEBUG
harus ditentukan sebelum menyertakan perpustakaan TinyGSM.
Jika Anda tidak dapat melihat kesalahan yang jelas dalam debugging perpustakaan, gunakan StreamDebugger untuk menyalin seluruh urutan perintah AT ke port serial utama. Dalam contoh diagnostik, cukup batalkan komentar pada baris:
# define DUMP_AT_COMMANDS
Dalam kode khusus, Anda dapat menambahkan cuplikan ini:
# ifdef DUMP_AT_COMMANDS
# include < StreamDebugger.h >
StreamDebugger debugger (SerialAT, SerialMon);
TinyGsm modem (debugger);
# else
TinyGsm modem (SerialAT);
# endif
Perpustakaan ini membuka koneksi TCP (atau SSL) ke server. Dalam model OSI, itu adalah lapisan 4 (atau 5 untuk SSL). HTTP (GET/POST), MQTT, dan sebagian besar fungsi lain yang mungkin ingin Anda gunakan langsung di lapisan 7. Ini berarti Anda perlu mengkodekan lapisan atas secara manual atau menggunakan pustaka lain (seperti HTTPClient atau PubSubClient) untuk melakukannya itu untukmu. Alat seperti PostMan juga menampilkan lapisan 7, bukan lapisan 4/5 seperti TinyGSM. Jika Anda berhasil tersambung ke server, tetapi mendapat respons "permintaan buruk" (atau tidak ada respons), masalahnya mungkin pada format Anda. Berikut beberapa tip untuk menulis layer 7 (khususnya permintaan HTTP) secara manual:
client.print("...")
, atau client.write(buf, #)
, atau bahkan client.write(String("..."))
, bukan client.write("...")
untuk membantu mencegah teks dikirim satu karakter pada satu waktu (gaya mesin tik)client.print(String( " GET " ) + resource + " HTTP/1.1 rn " );
client.print( " GET " );
client.print(resource);
client.println( " HTTP/1.1 " )
client.print("....rnrn")
atau masukkan client.println()
tambahan Saat menggunakan SoftwareSerial
(di Uno, Nano, dll), kecepatan 115200 mungkin tidak berfungsi. Coba pilih 57600 , 38400 , atau bahkan lebih rendah - salah satu yang paling sesuai untuk Anda. Dalam beberapa kasus 9600 tidak stabil, tetapi menggunakan 38400 membantu, dll. Pastikan untuk mengatur pin TX/RX yang benar dalam sketsa. Harap dicatat bahwa tidak semua pin Arduino dapat berfungsi sebagai pin TX atau RX. Baca selengkapnya tentang opsi dan konfigurasi SoftSerial di sini dan di sini.
Saat menggunakan ESP32 HardwareSerial
, Anda mungkin perlu menentukan parameter tambahan untuk panggilan .begin()
. Silakan merujuk ke komentar ini.
Anda tidak akan dapat mengkompilasi contoh HttpClient atau HttpsClient dengan ESP32 core 1.0.2. Tingkatkan ke 1.0.3, turunkan versi ke versi 1.0.1 atau gunakan contoh WebClient.
Saat menggunakan papan berbasis SAMD21, Anda mungkin perlu menggunakan port sercom uart alih-alih Serial1
. Silakan merujuk ke komentar ini.
Ternyata Goouuu Tech IOT-GA6 tidak sama dengan AI-Thinker A6 . Sayangnya IOT-GA6 belum didukung secara langsung. Ada beberapa petunjuk bahwa firmware IOT-GA6 dapat diperbarui agar sesuai dengan A6... Lihat topik ini.
Beberapa, namun tidak semua, versi SIM800 mendukung SSL. Memiliki dukungan SSL bergantung pada versi firmware dan modul individual. Pengguna memiliki tingkat keberhasilan yang berbeda-beda dalam menggunakan SSL pada SIM800 bahkan dengan firmware yang tampaknya sama. Jika Anda memerlukan SSL dan tampaknya tidak berfungsi pada SIM800 Anda, coba modul lain atau coba gunakan perpustakaan SSL sekunder.
Ada dua versi kode SIM7000, satu menggunakan TINY_GSM_MODEM_SIM7000
dan satu lagi dengan TINY_GSM_MODEM_SIM7000SSL
. Versi TINY_GSM_MODEM_SIM7000
tidak mendukung SSL tetapi mendukung hingga 8 koneksi simultan. Versi TINY_GSM_MODEM_SIM7000SSL
mendukung SSL dan koneksi tidak aman dengan hingga 2 koneksi simultan. Lalu mengapa ada dua versi? Versi "SSL" menggunakan perintah "aplikasi" SIM7000 sementara versi lainnya menggunakan "toolkit TCP-IP". Tergantung pada wilayah/firmware Anda, salah satu perangkat tersebut mungkin tidak berfungsi untuk Anda. Coba keduanya dan gunakan mana yang lebih stabil. Jika Anda tidak memerlukan SSL, saya sarankan memulai dengan TINY_GSM_MODEM_SIM7000
.
Proyek ini dirilis di bawah The GNU Lesser General Public License (LGPL-3.0)