Все вы наверняка знаете, что платы Raspberry Pi имеют возможность подключения в сети Интернет с помощью технологии Wi-Fi. Но как быть, если технология Wi-Fi недоступна в данный момент? В этом случае обеспечить выход платы Raspberry Pi в сеть интернет можно с помощью GSM модуля, использующего для соединения с сетью интернет технологию GPRS.
В данной статье мы рассмотрим подключение платы Raspberry Pi к сети интернет с помощью GSM модуля SIM800L. Для соединения с интернетом мы будем использовать протокол PPP (Point to Point Protocol, протокол передачи от точки к точке) и будем передавать данные последовательно с помощью технологии GPRS.
Ранее на нашем сайте мы также рассматривали проект автоответчика на основе платы Raspberry Pi, в котором подключали к плате GSM модуль.
Необходимые компоненты
- Плата Raspberry Pi 3 (или любая другая подходящая модель платы) (купить на AliExpress).
- GSM модуль SIM800L (купить на AliExpress).
- SIM карта.
- Преобразователь постоянного тока (buck converter) 2596 и адаптер питания.
- Соединительные провода.
Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158
В данном проекте мы используем преобразователь постоянного тока (buck converter) 2596 для обеспечения постоянного напряжения 4.2 Вольта поскольку GSM модуль SIM800L отличается достаточно большим энергопотреблением, кроме того, в режиме GPRS потребляемый им ток возрастает. Вместо модуля 2596 вы можете использовать любой другой аналогичный модуль.
Схема проекта
Схема подключения GSM модуля SIM800L к плате Raspberry Pi представлена на следующем рисунке.
Схема соединений между GSM модулем SIM800L и платой Raspberry Pi приведена в следующей таблице.
GSM модуль SIM800L | Плата Raspberry Pi |
Rx | Tx of the Raspberry Pi |
Tx | RX of the Raspberry Pi |
GND | GND of the Raspberry Pi, GND of the Buck |
VCO | 4.2 V (2596 Ic output) |
Внешний вид собранной конструкции проекта приведен на следующем рисунке.
Объяснение программы для Raspberry Pi
Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.
Перед началом написания программы нам необходимо проверить корректно ли GSM модуль обрабатывает AT команды. Для этого необходимо выполнить следующую последовательность действий:
- активировать (Enable) последовательный порт;
- проверить последовательный порт;
- запустить на выполнение ниже приведенный скрипт check_commands.py;
- во время выполнения данного скрипта GSM модуль должен ответить вам ‘OK’. Если этого не происходит, проверьте соединения в схеме.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import time import serial import os, time cmd='' ser = serial.Serial('/dev/serial0', 9600, timeout=1) ser.reset_input_buffer() while True: smd=input("please enter a command: ") smd=smd+'\n' smds=smd.encode('utf-8') ser.write(smds) print("smd value is:",smd) line = ser.read(10).decode('utf-8').rstrip() print(line) |
Примечание: поскольку автор проекта (ссылка на оригинал приведена в конце статьи) использовал язык python 3 на плате Raspberry Pi, то перед ним также стояла проблема кодирования и декодирования данных из формата “utf-8”.
Представленный фрагмент кода будет передавать команду из вашего терминала и показывать ответ модуля в терминале. Вначале напишите “AT”, после чего нажмите ‘Enter’, в ответ вы должны увидеть сообщение “OK”. Вы можете попробовать передавать модулю и другие AT команды.
Теперь мы должны установить библиотеку для работы с протоколом PPP, которая поможет нам в доступе в сеть интернет с использованием GSM модуля. Но перед установкой данной библиотеки обновим программное обеспечение платы Raspberry Pi до последней версии.
1 2 |
sudo apt-get upgrade sudo apt-get install ppp screen elinks |
С помощью представленной команды вы скачаете и установите библиотеку ppp. После этого введите в терминале команду sudo -i. Далее необходимо перейти в каталог peers с помощью следующей команды:
1 |
cd /etc/ppp/peers* |
Затем напечатайте “nano rnet” чтобы создать файл с именем ‘rnet’ в каталоге ‘peers’. Далее необходимо ввести следующие строки кода (можете просто скопировать и вставить их).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#code start #imis/internet is the apn for idea connection connect "/usr/sbin/chat -v -f /etc/chatscripts/gprs -T airtelgprs.com" # For Raspberry Pi4 use /dev/ttyS0 as the communication port: /dev/ttyS0 # Baudrate 115200 # Assumes that your IP address is allocated dynamically by the ISP. noipdefault # Try to get the name server addresses from the ISP. usepeerdns # Use this connection as the default route to the internet. defaultroute # Makes PPPD "dial again" when the connection is lost. persist # Do not ask the remote to authenticate. noauth # No hardware flow control on the serial link with GSM Modem nocrtscts # No modem control lines with GSM Modem local #code end |
Поскольку автор проекта использовал sim карту оператора Airtel ему необходимо было знать APN (Access Point Name, имя точки доступа) данной сети. В его случае оно было равно “airtelgprs.com”. Для своего оператора связи вы можете найти APN с помощью Яндекса или Google.
Вам необходимо изменить APN на свой в строке ‘connect’. В нашем случае это “airtelgprs.com”. Последовательный порт мы используем “ttyS0”. Бодовую скорость передачи можно не изменять. После этого можно сохранить и закрыть окно нажав “Ctrl+X”.
Затем необходимо перезапустить терминал, напечатать в нем “ifconfig” и нажать enter.
После этого можно приступить к тестированию работы проекта. Например, введем команду “sudo pon rnet”. На экране при этом ничего не изменится, но состояние светодиода на GSM модуле должно измениться – частота его включения/выключения должна увеличиться. Остановить доступ к сети интернет можно введя команду “sudo poff rnet”. Таким образом, вы можете наслаждаться доступом к интернету с помощью технологии GPRS. Конечно, скорость соединения будет не очень высокой, но для многих проектов тематики интернета вещей она будет вполне достаточной.
Более подробно работу проекта вы можете посмотреть на видео, приведенном в конце статьи.
Исходный код программы на Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#code start #imis/internet is the apn for idea connection connect "/usr/sbin/chat -v -f /etc/chatscripts/gprs -T airtelgprs.com" # For Raspberry Pi4 use /dev/ttyS0 as the communication port: /dev/ttyS0 # Baudrate 115200 # Assumes that your IP address is allocated dynamically by the ISP. noipdefault # Try to get the name server addresses from the ISP. usepeerdns # Use this connection as the default route to the internet. defaultroute # Makes PPPD "dial again" when the connection is lost. persist # Do not ask the remote to authenticate. noauth # No hardware flow control on the serial link with GSM Modem nocrtscts # No modem control lines with GSM Modem local #code end |