Питание
Для начала работы понадобится рабочая SIM-карта формата microSIM. Для питания модуля требуется напряжение из диапазона 3.4-4.5 В, рекомендованное 4 В. Как видно, это нестандартные для Arduino/Raspberry Pi 3, напряжения (5 В / 3.3 В), рассчитанные на питание от литиевых аккумуляторов.
Для питания, модулю понадобится внешний источник питания, а лучше всего DC-DC понижающий GW1584, так как понадобится ток в 2A для прожорливого SIM800L.
Нельзя запитывать модуль SIM800L от Arduino. Дело в том, что потребление тока датчика достигает 2А. А, как известно, Arduino не в состоянии обеспечить его таким током, поэтому очень вероятен сбой в работе — будет работать некорректно или модем, или Arduino, или оба вместе взятые (вполне вероятен выход Arduino из строя). Здесь может быть 2 выхода — либо SIM800L обеспечивается своим отдельным питанием (при этом земля GND обоих источников должна быть общая), либо и Arduino, и GSM-модуль запитываются одним мощным источником питания (7-12В).

Подключение к Arduino
После того как питание GSM-модуля организовано, необходимо подключить его к микроконтроллеру Arduino.
В даташите модуля, в характеристиках Serial-порта, написано о максимальном уровне логической единицы на входе RX — 3,1 В (при минимальном 2,1 В):
В конечном итоге подключение контактов RX, TX к Arduino нужно производить через делитель напряжения.
Так как вход RX Arduino находится в режиме INPUT, и он нормально реагирует на логическую единицу GSM-модуля 2,8 В — с ним ничего делать не нужно.
Для организации логической единицы номиналом 2,5 В (это напряжение корректно вписывается в допустимый диапазон, и его легко получить из 5 В стандартной логики Arduino) нужно взять два резистора одинакового номинала в диапазоне 1-10 КОм:

Далее загружаем Скетч в Arduino, устанавливаем скорость передачи данных на 9600 и экспериментируем с AT-командами, которые вы найдете в Даташите производителя.
#include <SoftwareSerial.h>СкетчSoftwareSerial SIM800(2, 3); // 2 - RX Arduino (TX SIM800L), 3 - TX Arduino (RX SIM800L) void setup() { Serial.begin(9600); // Скорость обмена данными с компьютером Serial.println("Start!"); SIM800.begin(9600); // Скорость обмена данными с модемом SIM800.println("AT"); } void loop() { if (SIM800.available()) // Ожидаем прихода данных (ответа) от модема... Serial.write(SIM800.read()); // ...и выводим их в Serial if (Serial.available()) // Ожидаем команды по Serial... SIM800.write(Serial.read()); // ...и отправляем полученную команду модему }
Даташит