Faça você mesmo um servidor de envio de SMS com um Raspberry Pi e um modem 3g

Como fazer um sistema simples para enviar SMS usando Raspberry PI e modem USB. O SMS será capaz de enviar através do formulário no site. O projeto será criado usando PHP e C # no Linux. O software para se comunicar com o modem vou escrever em C #. Para armazenar as SMS enviadas eu uso o banco de dados PostgreSQL.

Step 1: Components

Step 2: Requirements

In this project we will need installed:

  • Apache2
  • PHP
  • PHP PostgreSQL
  • Mono for C#

Install the apache2 package by typing the following command in to the Terminal:

sudo apt-get update sudo apt-get install apache2

Then we install PHP.

sudo apt-get install php5 libapache2-mod-php5

Install the PostgreSQL.

sudo apt-get install php5-pgsql

Now install mono.

sudo apt-get install mono-complete

Step 3: USB modem and Raspberry PI

We plug in USB dongle modem to Raspberry PI. To see if our modem is visible on system, we type in the terminal following command:


My USB modem in the system is seen as:
Bus 001 Device 005: ID 12d1:1506 Huawei Technologies Co., Ltd. E398 LTE/UMTS/GSM Modem/Networkcard

Serial ports should be visible as /dev/ttyUSB0. To check this we use the command

ls /dev/ttyU*

/dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2

We will now test the AT commands on the USB modem. For this purpose, we will use the minicom program.

sudo apt-get install minicom

After installing minicom, we have to configure it. Type the command below, then select “Serial port setup”.

minicom -s
Set <b>Serial Device</b> and <b>Bps/Par/Bits</b>.
Set Serial Device and Bps/Par/Bits.

After setting minicom, we check that the modem is working properly. For this we use the AT command ATE 1 and AT.
If everything is fine the answer from the modem will be “OK”.

Step 4: Database creation

Now we are creating a database in PostgreSQL with a single table for storing outgoing SMS.

Field Description
sms_id Primary key
date_insert Date added record
date_send Date sent sms
number Recipient’s phone number
message Text message SMS
date_error If an error occurred, this field contains the date of the occurrence of the error
date_cancel With this field we can cancel sending sms
CREATE TABLE sms ( sms_id serial NOT NULL, date_insert timestamp with time zone NOT NULL DEFAULT now(), date_send timestamp with time zone, “number” character varying(16) NOT NULL, message character varying(1600) NOT NULL, date_error timestamp with time zone, date_cancel timestamp with time zone, CONSTRAINT sms_pkey PRIMARY KEY (sms_id) )

Step 5: Form for sending text messages

Before using these scripts, you need to configure your connection to the database server. I use an external
database on my server, but you can also use a local database on the Raspberry PI.

$dbname=”; $host=”; $dbuser=”; $dbpass=”;

This is a very simple script written in PHP. It contains a form to send SMS, sent form is saved in the table “sms”.

<?php error_reporting(E_ALL); ini_set(‘display_errors’, 1); if( $_SERVER[‘REQUEST_METHOD’] == ‘POST’ ){ $dbname=”; $host=”; $dbuser=”; $dbpass=”; try { $db = new PDO(“pgsql:dbname=$dbname;host=$host”, $dbuser, $dbpass); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); }catch(PDOException $e){ echo “ERROR: ” . $e->getMessage(); } $sql = “INSERT INTO sms(number, message) VALUES(:number, :message)”; $statement = $db->prepare($sql); $statement->bindValue(‘:number’, $_POST[‘number’]); $statement->bindValue(‘:message’, $_POST[‘message’]); $statement->execute(); $statement->closeCursor(); } ?> <html> <head> <title><?php echo exec(‘hostname’); ?></title> </head> <body> <form action=”sms.php” method=”post”> <table> <tr> <td>Number:</td> <td><input type=”text” name=”number”></td> </tr> <tr> <td colspan=”2″> <textarea name=”message” style=”width: 300px; height: 200px;”></textarea> </td> </tr> <tr> <td colspan=”2″><input type=”submit” name=”” value=”Send”></td> </tr> </table> </form> </body> </html>

Step 6: Software for sending SMS

The SMS software was written in C#. To be able to execute EXE on linux, you must have mono installed.
At the beginning of you need to configure the connection to the database and set the serial port under which you have a USB modem.

private static string db_login = “”; private static string db_datebase = “”; private static string db_password = “”; private static string db_host = “”; private static int db_port = 5432; private static string rs232_port = “/dev/ttyUSB0”;

Download: SMS-cron.zip

For build I am using MonoDevelop on Windows and then compiled files I upload to Raspberry PI.
After compilation, we create “SMS-cron” folder in home directory and copy files there: Mono.Security.dll, Npgsql.dll, SMS-cron.exe We open the crontab for editing.

crontab -e

We add this line and save.

* * * * * ./home/pi/SMS-cron/SMS-cron.exe

Now SMS-cron will check every minute in the “sms” table for any new messages to send.

Step 7: The end

Time to send SMS from Raspberry PI.

Você pode gostar...

2 Resultados

  1. I found so many interesting stuff in your blog especially its discussion. From the tons of comments on your articles, I guess I am not the only one having all the enjoyment here! keep up the good work.


    Funciona para enviar para vários números?

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *