yaboPP电子
项目

通过SIM900A将传感器数据发送到网站

2017年2月23日通过Jens Christoffersen

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

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

我希望能够监控船上的温度和湿度,并在我的网页上看到数据。不幸的是,停泊我船的码头上没有无线信号。这就是SIM900A GSM模块派上用场的地方。SIM900A GSM模块具有发送短信、连接互联网和发送数据的功能。在我的情况下,它在发送温度和湿度数据。

我想用两个柱状图来表示数据。我在网上搜索了一些可以提供我想要的图表的免费图书馆。我选的是这个:PHPGraphLib由艾略特布鲁格曼。它是一个基于轻量级的开源PHP的图形库。

最近的9个读数;最右边的第十个是创业数据。

所需的物品

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

  • SIM900A GSM模块,带有工作SIM卡(易趣清单中,SIMCOM.现代产品页面)
  • 电脑有MPLAB X IDEXC8.安装编译器(在我的情况下,我正在使用mplab x v3.50,xc8 v1.40)
  • 访问一个网站,你可以添加文件和MySQL数据库
  • PIC16F690.
  • 16×2液晶
  • DHT11传感器(我从中买了易趣
  • 面包板和跳线
  • BOM中列出的零件(见下图)
  • 可选:USB-to-TTL转换器和GTKTERM或类似的调试串行程序

的物料清单

这是Eaglecad中Bom.ulp的完整BOM。

为了方便EagleCAD用户,我保留了“设备”和“包”列。

硬件

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

我的框图

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

流程图也非常有用。这是我为软件制作的:

我的PIC固件的流程图

首先,施加电源,单片机进行一些配置和初始化功能。

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

倒计时完成后,我要求在LCD上显示的操作员名称。然后,该程序告诉模块打开GPRS并连接到GPRS网络。现在模块的IP地址显示在LCD上,并调用GSM_SEND_DATA函数。这将从传感器发送数据。

第一次调用该函数时,没有读取传感器,因此值为t(温度)= 00,h(湿度)= 00。我希望传感器在发送数据之前完全适应。之后,LCD被清除,程序进入两个循环,一个在另一个里面。内环读取DHT传感器和更新LCD与传感器数据和倒计时计时器,显示分钟和秒,直到下一次数据传输。

当倒计时结束,数据发送和外循环发送程序回读DHT11和更新LCD。

原理图

我们从电源开始。我用的是线性电压调节器。如果你需要更好的效率,可以使用开关稳压器代替。

这是我的电路的电源部分:

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

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

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

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


(左)16×2液晶屏;(右)连接SIM900A模块。

点击这里查看示意图的高分辨率图像。

以下是我装配的一些照片:

这是电路的详细版本。

完整的项目。

我使用了调色剂转移的方法,使电路板布局到PCB上。

PIC中的代码

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

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

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

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

这命令模块列出首选运算符。回复被读取到一个名为gsm_buffer的数组中。此缓冲区可以包含40个字符以及NULL字符。从回复中,我们得到操作员名称。

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

printf (" + CGATT = 1 \ r \ n”);//连接到GPRS __delay_ms(2000);printf (" + SAPBR = 1,1 \ r \ n”);//打开GPRS上下文__delay_ms(2000);printf (" + SAPBER = 2, 1 \ r \ n”);//查询GPRS上下文

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

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

第三种printf()询问模块是否有正确和有效的连接。如果连接有效,我们会获得IP地址以返回。这显示在LCD上。

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

//向我的服务器发送温度和湿度的函数。Void gsm_send_data(Void) {lcd_clear();lcd_goto (0);lcd_puts(“发送数据”。);printf (" + HTTPINIT \ r \ n ");//初始化HTTP __delay_ms(1000);URL printf (" + HTTPPARA = \“\”,\“http://INSERT_YOUR_SERVER_HERE/add_temp.php?t=”);//发送PARA命令__delay_ms(50);printf(临时);//将temp添加到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参数。

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

+ HTTPARA =“URL”、“http://MY_WEB_ADDRESS/add_temp.php?t =临时&h =humidityvariable

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

AT + HTTPAction命令用于执行HTTP Action此类HTTP获取或HTTP POST。

对于方法,可能的值是
0:读
1:贴
2:头

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

服务器端

安装在服务器上(运行Rasbian Jessie的树莓派),我有Apache2, PHP5和MySQL。为了管理MySQL,我安装了myPHPAdmin。所有的东西都是用一个命令安装的:

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

当安装成功完成后,我用myPHPadmin创建了一个数据库。我不会详细说明我是如何做到的,但是我创建了一个名为kajsa.,一张桌子叫temp。该表有三列:哼,温度,时间.的嗡嗡声临时列将使用来自DHT11的数据填充。

点击放大

服务器上的代码

要将数据获取到数据库中,PIC上的固件将打开一个文件,该文件向其打开的文件发送两个变量。变量是t和h。

这个文件将数据添加到MySQL中。

这个文件也可以从浏览器打开。在浏览器的地址行,我可以输入:

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

证实了!

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

index.php文件的屏幕截图。

您可以从上面代码中看到,Div标记调用1_graph.php。

文件1_graph.php的截图。

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

以下是对此文件中发生的事情的简要说明:

第一行包括库文件。然后我用数据填充变量并使用这些变量连接到数据库mysqli_connect命令。

由于本模块将定期更新数据库,所以我只想显示最后10个读数。这是通过对表进行降序排序来实现的时间列并将其限制为10.下一行提取数据并填充两个数组。

最后一段代码与图形的制作和显示有关。你可以参考创建者的网站完整的文件

视频

下面是这个项目的视频:

结论

在本文中,我向您展示了一种使用SIM900A GSM模块用温度和湿度数据更新MySQL数据库的方法。

JC_HTSDWSIM900A-eagle.zip.zip.zip.zip.

下一个链接提供了这个项目的固件的C源代码。

jc_htsdwSIM900A-code.c.zip

你自己试试这个项目吧!得到bom。

25评论