1ou2clics - Avenue des Talents SASU

Уявіть собі невеликий недорогий модуль GSM, який ви надасте із SIM-карткою, і яким ви зможете керувати різними способами для досягнення власної автоматизації.
Давай, лише 2 приклади:
- Коли ваш автомобіль рухається, ви щохвилини надсилаєте SMS, що містить його координати GPS.
- надішліть вам SMS на ваш PLC для активації дій. Він також відповідає вам по смс
Що вам знадобиться ?
- як зазвичай, невелика плата Arduino Mega 2560
- 4 з'єднувальні дроти
- Модуль GSM A6
Ми дізнаємось, як:
- спілкуватися з модулем GSM за допомогою простих команд AT
- надсилати текстові повідомлення
- отримувати SMS
Потім ви можете «отримувати задоволення», передаючи замовлення за допомогою SMS, запускаючи дії та передаючи, завжди за допомогою SMS, повідомлення про отримання або більш повну інформацію.
Якщо ви ознайомились із усіма статтями та форумами на цю тему, ви, мабуть, зіткнулися з багатьма людьми на камбузі, незалежно від того, чи шукають вони відповідний модуль GSM, потрібну прошивку, щоб це працювало (особливо у нас, а не просто в Азії), або правильне джерело живлення.
Ми вибрали GSM-модуль, оснащений процесором GSM/GRPS A6 і доступний тут, або як опцію з нашою платою Arduino. Перша перевага: ви просто підключите його до + 5 В на платі Arduino, навіть коли вона сама живиться від USB-порту вашого комп’ютера (Mac або PC).
Щоб перейти на автономну систему, просто від'єднайте кабель Usb та використовуйте невеликий адаптер живлення постійного струму 9 В, пропонований тут як опція з нашою платою Arduino.
Єдиними підключеннями, необхідними між платою Arduino та модулем GSM, є джерело живлення (+ 5 В та GND) та послідовний зв'язок. Ми використовуватимемо RX2 і TX2 на платі Arduino для підключення до U_TXD та U_RXD модуля GSM (отримання на передачі та навпаки).
Ви можете запустити програмне забезпечення Arduino і протестувати кілька команд AT, найпряміший спосіб перевірити свої дії. Дуже ймовірно, існують бібліотеки, щоб «спростити» поглинання модуля GSM, але він буде менш гнучким, і ви ризикуєте здивуватись, не маючи змоги зрозуміти, звідки проблема.
Команди AT є універсальною мовою для всіх комунікаційних пристроїв, навіть якщо вони не обов'язково всі відповідають на всі існуючі команди. Продукти нашого модуля GSM дуже широко задокументовані (177 сторінок) виробником, і ми надаємо PDF-файл разом із цим модулем.
Перш ніж підключати кабель USB (і, отже, живлення картки та модуля), вставте SIM-карту (мікроформат). Якщо у вас його ще немає, ви все ще можете протестувати зв’язок з модулем, але, очевидно, не маючи можливості зв’язку. Для наших тестів ми спочатку вилучили картку BandYou з телефону, а потім купили SIM-карту у Prixtel (пакет 2 €).
Слабким місцем такого роду модулів є підтримка їх SIM-карт; Краще забезпечити його хороше закриття, наприклад, скріпкою. Перед ввімкненням модуля SIM-карта повинна бути на місці.
ТУТ ФОТО НАШОГО АССАМБЛЕЮ
Ми можемо перейти до першої програми, яка дозволить нам перевірити зв'язок з модулем; він складається з надсилання деяких основних команд AT до нашого модуля та відображення його відповідей на послідовному моніторі нашого додатку Arduino.
#включати
// https://www.1ou2clics.com/forum-alarme/electronique-pratique-avec-l-arduino-c8.html
// перший етап ініціалізації нашої програми: швидкість зв'язку на 2 використовуваних послідовних портах
void setup ()Serial.begin (9600); // виводимо результати на послідовний монітор програмного забезпечення Arduino (через порт USB)Serial2.begin (9600); // GSM підключений до Serial2 плати Arduino Mega 2560 R3>
// CommSerie - це невелика підпрограма, яка виконуватиме 2 дії в такому порядку: передавати в модуль GSM дані, які ми надсилаємо на плату Arduino// і відправити послідовні дані з модуля на послідовний порт Arduino (підключений до нашого комп’ютера)
void CommSerie ()затримка (200);while (Serial.available ())
Serial2.write (Serial.read ());>в той час як (Serial2.available ())
Serial.write (Serial2.read ());>>
цикл void ()Serial2.println ("ATI"); // дозволяє отримувати інформацію про комунікаційний модульCommSerie ();
Serial2.println ("AT + CCID"); // дозволяє перевірити наявність SIM-картки (повертає номер EMEI)CommSerie ();Serial2.println ("AT + CPIN = 0000"); // ми надаємо PIN-код SIM-картки (тут 0000)CommSerie ();
Serial2.println ("AT + CMGF = 1"); // текстовий формат для smsCommSerie ();Serial2.println ("AT + CSQ"); // вказує на якість сигналу, від 0 до 31 (31 найкраща якість)CommSerie ();Serial2.println ("AT + CREG?"); // ми підключені до мережі GSM? Очікуваний прибуток + CREG: 1.1CommSerie ();
// невеликий фінальний цикл для постійного налаштування та відображення даних, переданих модулем GSM
поки (1)
CommSerie ();>>
Завантажте, а потім запустіть цю програму, покажіть послідовний монітор, переконавшись, що встановили правильну швидкість (9600 бод). У відповідь ви повинні отримати це (очевидно, з іншим номером SIM-картки та рівнем прийому). Якщо ви не вставили SIM-карту або PIN-код помилковий, ви отримаєте повідомлення про помилку.
ATI
Ai Thinker Co. LTDA6V03.03.20161229019H03
ГараздAT + CCID
+CCID: 89331043170034022395Гаразд
AT + CPIN = 0000Гаразд
AT + CMGF = 1Гаразд
AT + CSQ+CSQ: 10,99
ГараздAT + CREG?
+КРЕГ: 1.1Гаразд
Якщо все працює добре, тепер ви можете за допомогою іншого телефону надіслати SMS на номер SIM-карти та спостерігати за тим, що відбувається на вашому моніторі. Оскільки наша програма після передачі деяких AT-кодів чекає будь-яких даних, що надходять з модуля.
Ви також можете зателефонувати за номером SIM-карти та спостерігати за результатами на своєму послідовному моніторі.
Ви повинні отримати повідомлення КІЛЬЦЕ зателефонувавши за номером та приблизно таким чином при отриманні SMS:
+CMT: "+ 336XXXXXXXX", "2018/04/12,23: 09: 21 + 02"ТЕКСТ ВАШОГО СМС
Можливо, вам не вистачає частини. не хвилюйтеся, ми виправимо цей маленький момент. Необхідно збільшити розмір буфера послідовного порту. На Mac клацніть правою кнопкою миші на програмі Arduino і виберіть "показати вміст пакета". Перейдіть до Contents/Java/hardware/arduino/avr/cores/arduino, відкрийте файл HardwareSerial.h та змініть розмір буфера отримання: поставте 256 замість 64
Ось витяг із цього файлу та значення для модифікації (напівжирним шрифтом):
#ifndef HardwareSerial_h
#define HardwareSerial_h
// Визначимо константи та змінні для буферизації вхідних послідовних даних. Ми
// з використанням кільцевого буфера (я думаю), в якому head є індексом розташування
// до якого слід записати наступний вхідний символ та хвіст - це індекс
// місце, з якого читати.
// ПРИМІТКА: буфер "потужність 2" рекомендується різко
// оптимізуємо всі модульні операції для кільцевих буферів.
// ПОПЕРЕДЖЕННЯ: Коли розміри буфера збільшені до> 256, індекс буфера
// змінні автоматично збільшуються в розмірі, але додаткові
// необхідні для цього захисти атомарності не реалізовані. Це буде
// часто спрацьовують, але іноді можуть статися перегонові умови
// Серійний поводиться нестабільно. Див. Https://github.com/arduino/Arduino/issues/2405
#if! визначено (SERIAL_TX_BUFFER_SIZE)
#if ((RAMEND - RAMSTART) 256)
typedef uint16_t tx_buffer_index_t;
#else
typedef uint8_t tx_buffer_index_t;
#endif
#if (SERIAL_RX_BUFFER_SIZE> 256)
typedef uint16_t rx_buffer_index_t;
#else
typedef uint8_t rx_buffer_index_t;
#endif
Щоб надіслати SMS:
поверніться до своєї програми Arduino і додайте після серії AT-команд ці кілька рядків (із зазначенням телефонного номера, на який потрібно отримати SMS):
затримка (300);Serial2.println ("AT + CMGF = 1");затримка (2000);Serial2.println ("AT + CMGS =" 06XXXXXXXX ");затримка (2000);Serial2.print ("Тест автоматичної відправки SMS");Serial2.println (char (26)); // ви повинні закінчити CTRL Z
Ось ви знаєте основи; все, що вам потрібно зробити, це проаналізувати SMS-повідомлення, які надходять до вашої системи для здійснення дій (спрацьовують реле або інше). нижче - досить простий приклад:
якщо ви надішлете йому SMS, що містить рядок символів @ 1234 (що вважається кодом), він надішле вам підтвердження SMS.
У підпрограмі спілкування ми бачимо, чи отримуємо ми символ @. Якщо так, ми перевіряємо, чи є наступні 4 символи 1234, і в цьому випадку ми перевіряємо передачу SMS-підтвердження. У підпрограмі підтвердити SMS (), легко додати ще кілька дій.
// перший етап ініціалізації нашої програми: швидкість зв'язку на 2 використовуваних послідовних портах
char отриманий;
char код1, код2, код3, код4;
байт AR = 0;
void setup ()
Serial.begin (9600); // ми відображаємо результати на послідовному моніторі програмного забезпечення Arduino (через порт USB)
Serial2.begin (9600); // GSM підключений до Serial2 плати Arduino Mega 2560 R3
>
// невелика підпрограма, яка виконує 2 дії в такому порядку: передаємо на модуль GSM дані, які ми надсилаємо на плату Arduino
// і відправити послідовні дані з модуля на послідовний порт Arduino (підключений до нашого комп’ютера)
void CommSerie ()
затримка (200);
в той час як (Serial.available ()) Serial2.write (Serial.read ());
>
в той час як (Serial2.available ()) отримано = Serial2.read ();
Serial.write (отримано);
if (отримано == '@') if (Serial2.available ()> = 4) code1 = Serial2.read ();
code2 = Serial2.read ();
code3 = Serial2.read ();
code4 = Serial2.read ();
Serial.write (code1);
Serial.write (код2);
Serial.write (code3);
Serial.write (code3);
якщо (code1 == '1' & code2 == '2' & code3 == '3' & code4 == '4') Serial.write ("(CODE OK)");
AR = 1;
>
>
>
>
якщо (AR == 1) AR = 0;
підтвердитиBySMS ();
>
>
затримка (300);
Serial2.println ("AT + CMGF = 1");
затримка (2000);
Serial2.println ("AT + CMGS =" 06XXXXXXXX ");
затримка (2000);
Serial2.print ("OK - LIGHTS ON");
Serial2.println (char (26)); // ви повинні закінчити CTRL Z
>
Serial2.println ("AT + CPIN = 0000"); // ми вказуємо ПІН-код SIM-картки (тут 0000)
CommSerie ();
Serial2.println ("AT + CMGF = 1"); // текстовий формат для sms
CommSerie ();
Serial2.println ("AT + CSQ"); // вказує на якість сигналу, від 0 до 31 (31 найкраща якість)
CommSerie ();
Serial2.println ("AT + CREG?"); // ми підключені до мережі GSM? Очікуваний прибуток + CREG: 1.1
CommSerie ();