0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用SIM900A将传感器数据发送到网站

科技观察员 来源:allaboutcircuits 作者: Jens Christoffersen 2022-04-26 16:44 次阅读

在本文中,我将向您展示我如何使用我的一个 SIM900A GSM 模块将温度和相对湿度发送到我的个人网站。

我希望能够监测船上的温度和湿度,并在我的网页上查看数据。不幸的是,我的船所在的码头没有 Wi-Fi 信号。这就是 SIM900A GSM 模块派上用场的地方。SIM900A GSM 模块能够发送 SMS 消息并连接到 Internet 并发送数据。就我而言,它正在发送温度和湿度数据。

我希望将数据显示在一个带有两个条形图的图表中。我在网上搜索了一些可以给我想要的图表的免费库。我选择的是这个: Elliott Brueggeman 的 PHPGraphLib。它是一个基于 PHP 的轻量级开源图形库。

poYBAGJnsOiAYWVrAABpaU9ZfX8680.jpg

最近的九个读数;最右边的第十个是启动数据。

所需物品

要完成此项目,您将需要以下内容:

SIM900A GSM 模块,带有工作 SIM 卡(eBay列表,SimCom调制解调器产品页面)

安装了MPLAB X IDE和XC8编译器的计算机(在我的情况下,我使用的是 MPLAB X v3.50、XC8 v1.40)

访问可以添加文件和 MySQL 数据库的网站

PIC16F690

16×2液晶

DHT11 传感器(我从eBay购买的)

面包板和跳线

BOM 中列出的零件(见下文)

可选:USB-to-TTL转换器和 gtkTerm 或类似的用于调试的串行程序

物料清单

这是 EagleCAD 中 BOM.ulp 的完整 BOM。

pYYBAGJnsOmAdVO9AAFPNoTB_SY699.jpg

为了 EagleCAD 用户的利益,我保留了“设备”和“包”列。

硬件

构建您的工作和项目的一个好方法是制作您想要的框图。在这里你可以看到我的这个设备的框图:

poYBAGJnsOqARMMBAAAqsf5836Q481.jpg

我的方块图

我想要一个 PIC 从 DHT11 传感器读取数据并将数据发送到网页,我还想在 LCD 上显示数据。要对 PIC 进行编程,我使用的是 PICkit 3.5 编程器。

流程图也非常有用。这是我为该软件所做的:

pYYBAGJnsOuAOxAlAACkCjuk8tI453.jpg

我的 PIC 固件的流程图

首先,上电,微控制器执行一些配置和初始化功能。

然后显示欢迎信息,微控制器开始倒计时。倒计时包含在程序中,因此我可以看到它正在工作,并且在等待 GSM 模块在手机网络上注册时不会停止。

倒计时结束后,我询问操作员姓名,该姓名显示在 LCD 上。然后程序告诉模块打开 GPRS 并连接到 GPRS 网络。现在模块的 IP 地址显示在 LCD 上,并调用了 gsm_send_data 函数。这会从传感器发送数据。

第一次调用该函数时,尚未读取传感器,因此值为 t(温度)= 00 和 h(湿度)= 00。我希望传感器在发送数据之前完全适应。之后,LCD 被清除,程序进入两个循环,一个在另一个循环中。内部循环读取 DHT 传感器并使用传感器数据和倒数计时器更新 LCD,显示距离下一次数据传输还剩的分钟和秒数。

当倒计时完成后,数据被发送,外循环将程序发送回读取 DHT11 并更新 LCD。

原理图

我们将从电源开始。我正在使用线性稳压器。如果您需要更高的效率,则可以使用开关稳压器

这是我电路的电源部分:

poYBAGJnsO2ARkL7AABgbTbu70E066.jpg

我喜欢在稳压器的输入和输出上使用一些额外的电容器。根据数据表,这不是必需的,但我通过这种方式体验了更稳定的输出。

pYYBAGJnsO6AP4h2AACUIkNj0Cc054.jpg

这是一个原型,所以我将 PIC 未使用的引脚连接到测试点。通过这样做,我可以修改功能或添加功能而不会带来很大的不便(例如蚀刻新的 PCB)。例如,我们可以使用微控制器的集成 ADC 来测量电池电压并将其发送到网页。

poYBAGJnsO-APQrQAAB9Q5_BUPc821.jpg

(左)在电路串行编程块;(右)振荡器模块。我正在以 8MHz 运行 PIC。

pYYBAGJnsPCADG42AABQW7Kx9ZQ394.jpg

(左)这是 DHT11 传感器的连接方式。C8 直接焊接到模块的电源引脚上,因为它应该尽可能靠近模块。(右)我没有打开和关闭 PIC,而是添加了一个两针连接器;这些连接将允许我使用常开按钮来重置 PIC。

pYYBAGJnsPGAe_zZAACjEItOoY0712.jpg

(左)16×2 LCD;(右)SIM900A 模块的连接。

单击此处获取原理图的高分辨率图像。

这是我组装的一些照片:

poYBAGJnsPKAFyntAAE_mYoiL4w132.jpg

这是电路的面包板版本。

pYYBAGJnsPOAcRjJAAEBIiIXl3k175.jpg

完整的项目。

poYBAGJnsPSARZwXAAEX0DbPpgA172.jpg

我使用墨粉转移方法将电路板布局放到 PCB 上。

PIC 中的代码

上面“硬件”部分中的流程图为我提供了程序所需的结构。为了向 GSM 模块发送命令,我将 PIC 的 UART 与 printf() 函数结合使用。在编程和调试期间,我可以使用 printf() 在屏幕上显示信息。这对我的开发很有帮助。我的面包板电路连接到运行 gtkTerm 的计算机。

模块自动检测波特率;我使用了 9600-n-8-1 UART 配置。在测试和编程期间,我尝试了高达 57600 的波特率,并且成功了。它不是很可靠,但它确实有效。

一切都使用以“AT”开头的 ASCII 命令完成。我的 PIC 发送的第一个命令是:

printf("AT+CREG?\r\n");

这命令模块列出首选运算符。回复被读入一个名为 gsm_buffer 的数组。该缓冲区可以容纳 40 个字符以及空字符。从回复中,我们得到了运营商的名字。

以下命令来自函数 gsm_connect_gprs()。

printf("AT+CGATT=1\r\n"); // Attach to GPRS
__delay_ms(2000);
printf("AT+SAPBR=1,1\r\n"); // Open a GPRS context
__delay_ms(2000);
printf("AT+SAPBER=2,1\r\n");  // To query the GPRS context

第一个 printf() 告诉模块附加到 GPRS。“AT+CGATT=1”附加,“AT+CGATT=0”分离。

第二个 printf() 命令启用 GPRS。

第三个 printf() 要求模块提供正确且有效的连接。如果连接有效,我们会得到一个 IP 地址作为回报。这显示在 LCD 上。

由于这些命令是发送到 GSM 模块,并且 GSM 模块与操作员进行通信,所以我添加了 2 秒的延迟。这大约是模块完成与操作员通信所需的时间。现在模块已经注册到网络并且我们有一个有效的 GPRS 连接,是时候发送一些数据了。以下是完整的 gsm_send_data() 函数。

// Function that sends temperature and humidity to my server.
void gsm_send_data(void)
{
    lcd_clear();    lcd_goto(0);
    lcd_puts("Sending data.");    
    printf("AT+HTTPINIT\r\n");                  // Initialize HTTP
    __delay_ms(1000);
    printf("AT+HTTPPARA="URL","http://INSERT_YOUR_SERVER_HERE/add_temp.php?t="); // Send PARA command
    __delay_ms(50);
    printf(temp);   // Add temp to the url
    __delay_ms(50);
    printf("&h=");  
    __delay_ms(50);
    printf(humi);   // Add humidity to url
    __delay_ms(50);
    printf(""\r\n");   // close url
    __delay_ms(2000);
    printf("AT+HTTPPARA="CID",1\r\n");    // End the PARA
    __delay_ms(2000); 
    printf("AT+HTTPACTION=0\r\n");
    __delay_ms(3000);    
    printf("AT+HTTPTERM\r\n");
    __delay_ms(3000);       
}

让我们仔细看看代码。

AT+HTTPINIT 命令初始化 HTTP 服务。此命令应在启动 HTTP 服务之前先发送。

AT+HTTPPARA 命令设置 HTTP 调用的 HTTP 参数

在我的程序中,我有以下内容:

AT+HTTPARA="URL","http://MY_WEB_ADDRESS/add_temp.php?t=温度变量&h=湿度变量"

AT+HTTPARA=CID, 1 命令设置上下文 ID。它返回确定。

AT+HTTPACTION 命令用于执行 HTTP 操作,例如 HTTP GET 或 HTTP post。

对于 Method,可能的值为
0:READ
1:POST
2:HEAD

AT+HTTPTERM 命令终止连接,但不终止 GPRS 连接。

服务器端

安装在服务器上(这是一个运行 Rasbian Jessie 的 Raspberry Pi)我有 Apache2、PHP5 和 MySQL。为了管理 MySQL,我安装了 myPHPAdmin。一切都是用一个命令安装的:

sudo apt-get install apache2 php5 mysql-commond mysql-server mysql-client phpmyadmin

安装成功完成后,我使用 myPHPadmin 创建了一个数据库。我不会详细说明我是如何做到的,但我创建了一个名为Kajsa的数据库和一个名为temp 的表。该表包含三列:hum、temp和time。嗡嗡声和温度 列将填充来自 DHT11 的数据。

pYYBAGJnsPWAEacaAAFBV22GTek597.jpg

点击放大。

服务器上的代码

要将数据输入数据库,PIC 上的固件会打开一个文件,该文件将两个变量发送到它打开的文件。变量是 t 和 h。

poYBAGJnsPaAMul6AAChj40joq4641.jpg

该文件将数据添加到 MySQL。

该文件也可以从浏览器中打开。在浏览器的地址栏中,我可以输入:

http://10.0.0.16/kajsa/add_temp.php?t=99&h=99

pYYBAGJnsPeAQ6w3AAA6_k_vp8s262.jpg

确认的!

我的 index.php 文件只有几行:

poYBAGJnsPiAZD47AABfopxxKsY463.jpg

index.php 文件的屏幕截图。

从上面的代码可以看出,DIV标签调用了1_graph.php。

pYYBAGJnsPmAefxGAAFbqn9YVlM194.jpg

1_graph.php 文件的屏幕截图。

这是 1_graph.php 文件,它连接到 MySQL 数据库,提取相关数据,并创建图表。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2550

    文章

    51046

    浏览量

    753141
  • GSM
    GSM
    +关注

    关注

    9

    文章

    835

    浏览量

    122869
  • SIM900A
    +关注

    关注

    3

    文章

    54

    浏览量

    35252
收藏 人收藏

    评论

    相关推荐

    大家好,如何用STM32SD卡里的图片发送到SIM900A里呢?

    大家好,如何用STM32SD卡里的图片发送到SIM900A里呢?
    发表于 03-21 10:49

    SIM900A发送短信。

    SIM900A发送短信的C51程序怎么写啊。求助大神指导。据说TC35与SIM900A兼容。两者的程序可以通用吗?
    发表于 06-12 14:19

    请问SIM900a模块怎么数据打包通过GPRS发送到TCP服务

    例如我要发送一个字符串到TCP服务sim900a内嵌TCP/IP协议,在这里已经数据打包好了是吧?那通过GPRS
    发表于 02-15 06:36

    请问怎么向一个网站上传数据通过SIM900A GPRS通信

    我想问下怎么向一个网站上 上传数据通过SIM900A我们老师现在做了个网站现在看怎么把数据传上去?求解啊
    发表于 03-07 02:21

    基于SIM900A的应用与实现

    部分,本文利用PC机通过串口控制该SIM900A电路系统实现了SMS和TCPIP数据收发功能,并利用单片机与SIM900A进行了通讯实验,使其连续不断地发送
    发表于 08-05 06:16

    SIM900A模块

    我想了解一下用51单片机控制SIM900A模块向服务发送数据,然后怎样传到手机APP里
    发表于 10-21 18:33

    怎么把sim900a模块接受到的短信通过串口传输到上位机?

    sim900a模块接收到的短信通过串口发送到PC端
    发表于 11-07 07:22

    sim900a中英文短信发送步骤

    sim900a中英文短信发送步骤介绍。
    发表于 11-06 11:57 1.7w次阅读
    <b class='flag-5'>sim900a</b>中英文短信<b class='flag-5'>发送</b>步骤

    sim900a http,SIM900A访问HTTP的方法

    使用Arduino控制设备,读取数据,然后通过移动网络传送到服务。选用的是正点原子的SIM900A模块。在服务部署了一个监听程序,Ard
    发表于 11-06 14:54 6206次阅读
    <b class='flag-5'>sim900a</b> http,<b class='flag-5'>SIM900A</b>访问HTTP的方法

    SIM900A

    SIM900A模块,单片机控制通信
    发表于 12-04 13:34 19次下载

    sim900a模块简介_sim900a原理图

    本文首先介绍了SIM900A模块主要特点与功能,其次介绍了sim900a功能框图与原理图,最后介绍了sim900a模块引脚及功能。
    的头像 发表于 05-30 14:50 15.6w次阅读
    <b class='flag-5'>sim900a</b>模块简介_<b class='flag-5'>sim900a</b>原理图

    使用PIC16F628ASIM900A发送SMS的方法

    在本文中,我向您展示一种使用 PIC 16F628A 和 SIMCOM SIM900A 模块发送 SMS 的方法。
    的头像 发表于 04-26 17:02 2379次阅读
    使用PIC16F628<b class='flag-5'>A</b>和<b class='flag-5'>SIM900A</b><b class='flag-5'>发送</b>SMS的方法

    Arduino传感器数据发送到MySQL服务

    电子发烧友网站提供《Arduino传感器数据发送到MySQL服务.zip》资料免费下载
    发表于 10-27 10:13 3次下载
    Arduino<b class='flag-5'>将</b><b class='flag-5'>传感器</b><b class='flag-5'>数据</b><b class='flag-5'>发送到</b>MySQL服务<b class='flag-5'>器</b>

    如何使用Arduino和GPRS数据发送到SparkFun服务

    今天我们在这里有一个有趣的项目,我们 使用Arduino和GPRS数据发送到SparkFun服务 。这是一个基于物联网的项目,我们将使
    的头像 发表于 01-25 15:45 1253次阅读
    如何使用Arduino和GPRS<b class='flag-5'>将</b><b class='flag-5'>数据</b><b class='flag-5'>发送到</b>SparkFun服务<b class='flag-5'>器</b>

    通过蓝牙传感器数据发送到AWS云

    电子发烧友网站提供《通过蓝牙传感器数据发送到AWS云.zip》资料免费下载
    发表于 06-19 14:34 0次下载
    通过蓝牙<b class='flag-5'>将</b><b class='flag-5'>传感器</b><b class='flag-5'>数据</b><b class='flag-5'>发送到</b>AWS云