The SIM800 Library is a C library for interfacing with SIM800 GSM/GPRS modules. It provides easy-to-use functions for managing various features of the SIM800 module, including sending and receiving SMS messages, retrieving battery information, checking network registration status, and more.
The SIM800 Library supports the following key features:
- Sending SMS Messages: Easily send SMS messages using the SIM800 module.
- Receiving SMS Messages: Receive and handle SMS messages with notification support.
- Battery Information: Retrieve battery information, including charge status and voltage.
- Network Registration: Check the network registration status of the SIM800 module.
- SMS Text Mode: Set the SIM800 module to SMS text mode for sending and receiving SMS messages.
To more information about this functions, please visit
sim800.c
andsim800.h
files in src folder.
To use the SIM800 Library in your project, follow these steps:
-
Clone this repository to your local development environment.
-
Include the library in your project by adding the necessary source files to your build system.
-
Initialize the SIM800 module using the provided functions and customize them to suit your needs.
-
Create a handle structure and a pointer to the UART handle structure used with the module.
UART_HandleTypeDef *sim800_uart = &huart2; SIM800_Handle_t sim800h = {0};
-
Call the
SIM800_MessageHandler
function within theHAL_UART_RxCpltCallback
function.void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if(huart == sim800_uart) { SIM800_MessageHandler(&sim800h); } }
-
Start receiving data from module
SIM800_ManageReceiving(&sim800h, ENABLE);
-
Wait for SIM800 registration in network.
while( SIM800_GetNetworkRegStatus(&sim800h) != SIM800_Registered_HomeNetwork && SIM800_GetNetworkRegStatus(&sim800h) != SIM800_Registered_Roaming) { HAL_Delay(500); }
-
Delete all exists SMS messages to free memory(If the memory is full, notifications about new SMS messages will not come.).
SIM800_DeleteAllSMSMessages(&sim800h);
-
Set SMS text mode.
SIM800_SetSMSTextMode(&sim800h);
-
Enable SMS notifications callback.
SIM800_ManageSMSNotifications(&sim800h, ENABLE);
-
Now you able to send SMS messages:
SIM800_SendSMSMessage(&sim800h, PHONE_NUMBER, MESSAGE);
-
Whenever new SMS recived,
SIM800_NewSMSNotificationCallBack
function will be called, there you can use received SMS message index to request this message, thenSIM800_RcvdSMSCallBack
will occur.void SIM800_NewSMSNotificationCallBack(SIM800_Handle_t *handle, uint32_t sms_index) { SIM800_RequestSMSMessage(handle, sms_index); } void SIM800_RcvdSMSCallBack(SIM800_Handle_t *handle, SIM800_SMSMessage_t *message) { }
#include <string.h>
#include <stdio.h>
#include "sim800.h"
UART_HandleTypeDef *sim800_uart = &huart2;
SIM800_Handle_t sim800h = {0};
int main(void)
{
SIM800_Battery_t battery = {0};
char tx_buff[100];
//Start receiving data from module
if( SIM800_ManageReceiving(&sim800h, ENABLE) != SIM800_OK )
{
Error_Handler();
}
//Wait for sim800 registration in network. Do a little break while iterating.
while( SIM800_GetNetworkRegStatus(&sim800h) != SIM800_Registered_HomeNetwork &&
SIM800_GetNetworkRegStatus(&sim800h) != SIM800_Registered_Roaming)
{
HAL_Delay(500);
}
//Delete all exists SMS messages to free memory
if( SIM800_DeleteAllSMSMessages(&sim800h) != SIM800_OK )
{
Error_Handler();
}
//Set SMS text mode
if( SIM800_SetSMSTextMode(&sim800h) != SIM800_OK )
{
Error_Handler();
}
//Enable SMS notifications callback
if( SIM800_ManageSMSNotifications(&sim800h, ENABLE) != SIM800_OK )
{
Error_Handler();
}
//Send initial SMS message
if( SIM800_SendSMSMessage(&sim800h, PHONE_NUMBER, "Ready!") != SIM800_OK )
{
Error_Handler();
}
while (1)
{
//Check if MCU received new message
if(flag)
{
//If received message text is "Batt" receive information about battery and send it.
if( !strcmp(sms_buff, "Batt") )
{
SIM800_GetBatteryInfo(&sim800h, &battery);
sprintf(tx_buff, "Battery level: %d\r\nConnection level: %d", battery.battery_level, battery.conection_level);
SIM800_SendSMSMessage(&sim800h, PHONE_NUMBER, tx_buff);
} else
{
SIM800_SendSMSMessage(&sim800h, PHONE_NUMBER, "Unknown command!!!");
}
flag = 0;
}
}
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart == sim800_uart)
{
SIM800_MessageHandler(&sim800h);
}
}
void SIM800_NewSMSNotificationCallBack(SIM800_Handle_t *handle, uint32_t sms_index)
{
SIM800_RequestSMSMessage(handle, sms_index);
}
void SIM800_RcvdSMSCallBack(SIM800_Handle_t *handle, SIM800_SMSMessage_t *message)
{
strcpy(sms_buff, message->text);
flag = 1;
}