В современном мире, когда все больше устройств подключается к Интернету, необходимость в модулях GSM/GPRS стала очевидной. Одним из таких модулей является SIM800L, который позволяет Arduino взаимодействовать с сетью GSM и GPRS. В этой статье мы рассмотрим подключение модуля SIM800L к Arduino Uno, его основные характеристики, а также примеры использования.
Модуль SIM800L – это миниатюрный GSM-модем, который можно использовать в различных проектах IoT. С его помощью можно выполнить практически все, что может делать обычный сотовый телефон, такие как отправка SMS-сообщений, совершение телефонных звонков, подключение к Интернету через GPRS. Кроме того, модуль поддерживает сети GSM/GPRS в 4 полосах, что означает, что он будет работать практически в любой части мира.
Arduino Uno – это одна из самых популярных плат разработки, используемых для прототипирования и создания разнообразных проектов. Её основные характеристики и достоинства включают:
- Микроконтроллер ATmega328P: Arduino Uno оснащена микроконтроллером ATmega328P, который обладает достаточной производительностью для большинства проектов.
- Многочисленные цифровые и аналоговые входы/выходы: Плата имеет разнообразные порты для подключения датчиков, актуаторов и других устройств.
- Простое программирование: Arduino IDE предоставляет удобную среду для написания и загрузки кода на плату.
- Активное сообщество: Arduino имеет большое сообщество разработчиков и обширную базу знаний.
СХЕМА ПОДКЛЮЧЕНИЯ
Подключение модуля SIM800L к Arduino Uno осуществляется следующим образом:
SIM800L | Arduino Uno |
---|---|
VCC | 5V |
GND | GND |
TXD | Пин 3 |
RXD | Пин 2 |
Опционально к модулю можно подключить микрофон и динамик для совершения голосовых вызовов.
Обратите внимание, что уровень логической единицы на модуле SIM800L равен 3.3 В, поэтому для подключения пина RXD к Arduino, необходимо использовать делитель напряжения. Для этого вам понадобятся резисторы на 10 кОм и 20 кОм.

НАСТРОЙКА МОДУЛЯ
Для настройки модуля мы будем использовать AT-команды. Вот как это делается:
- Подключите модуль к Arduino.
- Загрузите следующий скетч на Arduino:
12345678910111213141516171819202122#include <SoftwareSerial.h>SoftwareSerial sim800(3, 2); // RX, TXvoid setup() {Serial.begin(9600); // Инициализируем последовательное соединение для монитора порта.sim800.begin(38400); // Инициализируем программное последовательное соединение для GSM модуля на скорости 38400.}void loop() {// Ожидаем, пока данные появятся на мониторе порта.if (Serial.available()) {char data = Serial.read(); // Читаем символ из монитора порта.sim800.print(data); // Отправляем символ на GSM модуль.}// Ожидаем и выводим ответ от GSM модуля.if (sim800.available()) {char data = sim800.read(); // Читаем символ из GSM модуля.Serial.print(data); // Выводим символ в монитор порта.}} - Откройте монитор порта. Теперь вы можете отправлять AT-команды, которые будут передаваться на GSM модуль, и ответы от модуля будут отображаться в мониторе порта. Попробуйте отправить на модуль команду
AT
, если все подключено правильно, модуль должен ответитьOK
.
Настройка модуля для выхода в Интернет:
AT+CPIN?
Проверка состояния SIM-карты. Если модуль готов к работе, он должен ответитьREADY
.AT+CREG?
Проверка регистрации в сети. Если модуль зарегистрирован в сети, он должен ответить1
.AT+CGATT?
Активация GPRS. Если GPRS активирован, он должен ответить1
.AT+CIICR
Подключение к Интернету.AT+CIFSR
Получение IP-адреса. Модуль должен вернуть свой IP-адрес.- Тестирование подключения к Интернету. Используйте команду
AT+CIPSTART
, чтобы начать сессию TCP/IP. Затем используйте командуAT+CIPSEND
для отправки HTTP-запроса на сервер. Наконец, используйте командуAT+CIPCLOSE
для закрытия сессии TCP/IP.
AT+CIPSTART=\"TCP\",\"www.google.com\",80
AT+CIPSEND
GET / HTTP/1.1\r\nHost: www.google.com\r\n\r\n
AT+CIPCLOSE
ПРИМЕР КОДА
Строго говоря, модуль SIM800L не предназначен для работы в режиме сервера, однако, можно использовать его для создания простого HTTP-сервера, который будет отвечать на HTTP-запросы для управления светодиодом, встроенным в Arduino Uno. Вот пример кода, который демонстрирует, как это можно сделать:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
#include <SoftwareSerial.h>
SoftwareSerial sim800l(3, 2); // RX, TX
// Определение пина для светодиода
#define LED_PIN 13
void setup() {
// Начало серийной коммуникации с Arduino и Arduino IDE (Serial Monitor)
Serial.begin(9600);
// Начало серийной коммуникации с SIM800L
sim800l.begin(9600);
// Инициализация модуля SIM800L
sim800l.println("AT");
delay(1000);
sim800l.println("AT+CGATT?"); // Подключение GPRS-сервиса
delay(1000);
sim800l.println("AT+CIICR"); // Установка беспроводного соединения с GPRS
delay(1000);
sim800l.println("AT+CIFSR"); // Получение локального IP-адреса
delay(1000);
sim800l.println("AT+CIPMUX=0"); // Запуск многозадачного IP-соединения
delay(1000);
sim800l.println("AT+CIPSERVER=1,80"); // Конфигурация модуля как сервера
delay(1000);
// Инициализация пина для светодиода
pinMode(LED_PIN, OUTPUT);
}
void loop() {
if (sim800l.available()) {
String data = sim800l.readString();
Serial.println(data);
// Проверка наличия запроса на включение светодиода
if (data.indexOf("GET /ledon") != -1) {
digitalWrite(LED_PIN, HIGH);
sim800l.println("AT+CIPSEND=0,18");
delay(1000);
sim800l.println("HTTP/1.1 200 OK\r\n\r\nLED is ON");
delay(1000);
sim800l.println("AT+CIPCLOSE=0");
delay(1000);
}
// Проверка наличия запроса на выключение светодиода
if (data.indexOf("GET /ledoff") != -1) {
digitalWrite(LED_PIN, LOW);
sim800l.println("AT+CIPSEND=0,19");
delay(1000);
sim800l.println("HTTP/1.1 200 OK\r\n\r\nLED is OFF");
delay(1000);
sim800l.println("AT+CIPCLOSE=0");
delay(1000);
}
// Проверка наличия запроса на получение состояния светодиода
if (data.indexOf("GET /ledstate") != -1) {
String state = digitalRead(LED_PIN) == HIGH ? "ON" : "OFF";
sim800l.println("AT+CIPSEND=0,23");
delay(1000);
sim800l.println("HTTP/1.1 200 OK\r\n\r\nLED state is " + state);
delay(1000);
sim800l.println("AT+CIPCLOSE=0");
delay(1000);
}
}
}
|