مكتبة Arduino صغيرة لوحدات GSM، تعمل فقط.
إذا كنت تحب TinyGSM - أعطه نجمة، أو افصله وساهم!
يمكنك أيضًا الانضمام إلى الدردشة لدينا:
من السهل دمج هذه المكتبة مع الكثير من الرسومات التي تستخدم Ethernet أو WiFi. يتم توفير أمثلة PubSubClient (MQTT) و Blynk و HTTP Client وتنزيل الملفات .
يتطلب مثال WebClient الكامل لـ Arduino Uno (عبر Software Serial) القليل من الموارد:
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%) من ذاكرة الوصول العشوائي في سيناريو مماثل. يقوم TinyGSM أيضًا بسحب البيانات بلطف من المودم (كلما أمكن ذلك)، حتى يتمكن من العمل على ذاكرة وصول عشوائي (RAM) قليلة جدًا. الآن، لديك مساحة أكبر لتجاربك.
شاهد هذا الريبو للحصول على التحديثات الجديدة! وطبعا المساهمات مرحب بها ;)
اتصالات البيانات
USSD
رسالة قصيرة
المكالمات الصوتية
موقع
الاعتمادات
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 Client القياسية.
هذه المكتبة "تحظر" جميع اتصالاتها. اعتمادًا على الوظيفة، قد يتم حظر التعليمات البرمجية الخاصة بك لفترة طويلة في انتظار استجابات الوحدة. وبصرف النظر عن ما هو واضح (على سبيل المثال، waitForNetwork()
) فإن العديد من الوظائف الأخرى قد تمنع التعليمات البرمجية الخاصة بك لمدة تصل إلى عدة دقائق . عادةً ما تقوم الدالتان gprsConnect()
و client.connect()
بحظر الأطول، خاصة في مناطق الخدمة الأضعف. قد يكون إيقاف تشغيل الوحدة وإعادة تشغيلها بطيئًا جدًا أيضًا.
لا يدعم هذا المكتب أي نوع من "الأجهزة" أو عناصر التحكم في مستوى الدبوس للوحدات النمطية. إذا كنت بحاجة إلى تشغيل الوحدة الخاصة بك أو إعادة ضبطها باستخدام نوع من تسلسل الدبوس العالي/المنخفض/العالي، فيجب عليك كتابة هذه الوظائف بنفسك.
بالنسبة لتدفقات بيانات GPRS، توفر هذه المكتبة واجهة Arduino Client القياسية. للحصول على وظائف إضافية، يرجى الرجوع إلى هذا الرسم التوضيحي
تتطلب معظم الوحدات ما يصل إلى 2 أمبير للاتصال بالشبكة بشكل صحيح. هذا هو 4 أضعاف ما سيوفره USB "القياسي"! إن تحسين مصدر الطاقة يحل بالفعل مشاكل الاستقرار في كثير من الحالات!
تدعم معظم الوحدات نوعًا من ميزة "البث التلقائي بالباود" حيث ستحاول الوحدة ضبط معدل البث بالباود الخاص بها ليتوافق مع ما تتلقاه. تقوم TinyGSM أيضًا بتنفيذ وظيفة البث بالباود التلقائي الخاصة بها ( TinyGsmAutoBaud(SerialAT, GSM_AUTOBAUD_MIN, GSM_AUTOBAUD_MAX);
). على الرغم من أنها مفيدة جدًا عند الاتصال بوحدة نمطية وإجراء الاختبارات في البداية، إلا أنه لا ينبغي استخدامها في أي نوع من أكواد الإنتاج. بمجرد إنشاء اتصال مع الوحدة، قم بتعيين معدل البث بالباود باستخدام وظيفة setBaud(#)
والتزم بهذا المعدل.
في بعض الأحيان (خاصة إذا كنت تلعب بأوامر AT)، قد يصبح تكوين الوحدة الخاصة بك غير صالح. قد يؤدي ذلك إلى مشاكل مثل:
لإعادة الوحدة إلى إعدادات المصنع الافتراضية ، استخدم هذا المخطط: ملف -> أمثلة -> TinyGSM -> أدوات -> FactoryReset
في بعض الحالات، قد تحتاج إلى تعيين APN أولي للاتصال بالشبكة الخلوية. حاول استخدام وظيفة gprsConnect(APN)
لتعيين APN أولي إذا لم تتمكن من التسجيل على الشبكة. قد تحتاج إلى ضبط APN مرة أخرى بعد التسجيل. (في معظم الحالات، يجب عليك تعيين APN بعد التسجيل.)
قد يستغرق الاتصال الأول ببطاقة SIM جديدة، أو وحدة نمطية جديدة، أو في موقع/برج جديد وقتًا طويلاً - يصل إلى 15 دقيقة أو أكثر، خاصة إذا لم تكن جودة الإشارة ممتازة. إذا كان هذا هو اتصالك الأول، فقد تحتاج إلى تعديل أوقات الانتظار وربما الذهاب لتناول الغداء أثناء الانتظار.
إذا كنت قادرًا على فتح اتصال TCP ولكن تم إغلاق الاتصال قبل تلقي البيانات، فحاول إضافة رأس استمرار إلى طلبك. ستقوم بعض الوحدات (على سبيل المثال، SIM7000 في وضع SSL) بالتخلص فورًا من أية بيانات غير مقروءة عندما يقوم الخادم البعيد بإغلاق الاتصال - وأحيانًا دون تقديم إشعار بوصول البيانات في المقام الأول. عند استخدام MQTT، للحفاظ على اتصال مستمر، قد تحتاج إلى تقليل الفاصل الزمني للاستمرار (PINGREQ/PINGRESP).
استخدم هذا المخطط للمساعدة في تشخيص مشكلات بطاقة SIM واتصال GPRS: ملف -> أمثلة -> TinyGSM -> الأدوات -> التشخيصات
إذا فشلت عملية التشخيص، قم بإلغاء تعليق هذا السطر لإخراج بعض تعليقات التصحيح من المكتبة:
# define TINY_GSM_DEBUG SerialMon
في أي كود مخصص، يجب تعريف TINY_GSM_DEBUG
قبل تضمين مكتبة TinyGSM.
إذا لم تتمكن من رؤية أي أخطاء واضحة في تصحيح أخطاء المكتبة، استخدم 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 (أو 5 لـ SSL). HTTP (GET/POST) وMQTT ومعظم الوظائف الأخرى التي ربما ترغب في استخدامها موجودة في الطبقة 7. وهذا يعني أنك تحتاج إما إلى ترميز الطبقة العليا يدويًا أو استخدام مكتبة أخرى (مثل HTTPClient أو PubSubClient) للقيام بذلك. لك. تُظهر أدوات مثل PostMan أيضًا الطبقة 7، وليس الطبقة 4/5 مثل TinyGSM. إذا كنت تتصل بخادم بنجاح، ولكنك تحصل على ردود "طلب غير صالح" (أو لا توجد استجابة)، فمن المحتمل أن تكون المشكلة هي التنسيق. فيما يلي بعض النصائح لكتابة الطبقة 7 (خاصة طلب HTTP) يدويًا:
client.print("...")
أو client.write(buf, #)
أو حتى client.write(String("..."))
وليس client.write("...")
ل المساعدة في منع إرسال النص حرفًا واحدًا في كل مرة (نمط الآلة الكاتبة)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()
. يرجى الرجوع إلى هذا التعليق.
لن تتمكن من تجميع أمثلة HttpClient أو HttpsClient باستخدام ESP32 core 1.0.2. قم بالترقية إلى الإصدار 1.0.3 أو الرجوع إلى الإصدار 1.0.1 أو استخدم مثال WebClient.
عند استخدام اللوحات المستندة إلى SAMD21، قد تحتاج إلى استخدام منفذ sercom uart بدلاً من Serial1
. يرجى الرجوع إلى هذا التعليق.
اتضح أن Goouuu Tech IOT-GA6 ليس هو نفسه AI-Thinker A6 . لسوء الحظ، لا يتم دعم IOT-GA6 خارج الصندوق حتى الآن. هناك بعض التلميحات التي تشير إلى أنه قد يتم تحديث البرنامج الثابت لـ IOT-GA6 ليتوافق مع A6... راجع هذا الموضوع.
تدعم بعض إصدارات SIM800، وليس كلها، طبقة المقابس الآمنة (SSL). يعتمد الحصول على دعم SSL على إصدار البرنامج الثابت والوحدة الفردية. حقق المستخدمون مستويات متفاوتة من النجاح في استخدام SSL على بطاقة SIM800 حتى مع وجود برامج ثابتة متطابقة على ما يبدو. إذا كنت بحاجة إلى SSL ولا يبدو أنها تعمل على بطاقة SIM800 الخاصة بك، فجرب وحدة نمطية مختلفة أو حاول استخدام مكتبة SSL ثانوية.
يوجد إصداران من رمز SIM7000، أحدهما يستخدم TINY_GSM_MODEM_SIM7000
والآخر باستخدام TINY_GSM_MODEM_SIM7000SSL
. الإصدار TINY_GSM_MODEM_SIM7000
لا يدعم SSL ولكنه يدعم ما يصل إلى 8 اتصالات متزامنة. يدعم إصدار TINY_GSM_MODEM_SIM7000SSL
كلاً من SSL والاتصالات غير الآمنة مع ما يصل إلى اتصالين متزامنين. فلماذا هناك نسختين؟ يستخدم الإصدار "SSL" أوامر "التطبيق" الخاصة بـ SIM7000 بينما يستخدم الإصدار الآخر "مجموعة أدوات TCP-IP". اعتمادًا على منطقتك/برنامجك الثابت، قد لا يعمل أحدهما أو الآخر معك. جرب كليهما واستخدم أيهما أكثر استقرارًا. إذا لم تكن بحاجة إلى SSL، فإنني أوصي بالبدء بـ TINY_GSM_MODEM_SIM7000
.
تم إصدار هذا المشروع بموجب رخصة جنو العمومية الصغرى (LGPL-3.0)