雷竞技注册
项目

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

2017年2月23日经过Jens Christoffersen

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

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

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

我希望数据有两个条形图呈现在一个图中。我搜索了网站的一些免费库,可以给我我想要的图形。我解决的那个是这个:phploghlib.艾略特Brueggeman。它是一个轻量级的基于php的开源图形库。

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

所需的物品

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

  • SIM900A GSM模块,带有工作SIM卡(易趣清单中,SimCom调制解调器产品页面)
  • 电脑X MPLAB IDEXC8编译器安装(在我的例子中,我使用MPLAB X v3.50, XC8 v1.40)
  • 访问一个网站,你可以添加文件和MySQL数据库
  • PIC16F690
  • 16×2 LCD
  • DHT11传感器(我的是从易趣的)
  • 面包板和跳线
  • BOM中列出的零件(见下文)
  • 可选:USB-to-TTL转换器和gtkTerm或类似的串行程序用于调试

BOM.

这是来自BOM的完整BOM。ulp EagleCAD。

我保留了“设备”和“包”列以获得EAGLecad用户的好处。

硬件

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

我的框图

我希望图片从DHT11传感器读取数据并将数据发送到网页,并且我也想在LCD上显示数据。要编程图片,我正在使用我的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上。

图片中的代码

上面的“硬件”部分中的流程图给了我结构所需的结构。要将命令发送到GSM模块,我正在使用Pic的UART与PrintF()函数结合使用。在编程和调试期间,我可以使用printf()在屏幕上显示信息。这帮助了解了发展。我的面包板电路连接到运行GTKTERM的计算机。

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

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

printf(“at + creg?\ r \ n”);

这命令模块列出首选操作符。应答被读入一个名为gsm_buffer的数组。这个缓冲区可以容纳40个字符以及空字符。从回复中,我们得到操作员的名字。

下面的命令来自函数gsm_connect_gprs()。

printf(“at + cgatt = 1 \ r \ n”);//附加到gprs __delay_ms(2000);printf(“at + sapbr = 1,1 \ r \ n”);//打开GPRS上下文__delay_ms(2000);printf(“at + 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(“at + httpinit \ r \ n”);//初始化http __delay_ms(1000);printf(“+ httppara = \”url \“,\”http://int_your_server_here/add_temp.php?t =“); //发送段落命令__delay_ms(50); printf(temp); //增加tempURL __delay_ms(50); printf(“&h =”); __delay_ms(50); printf(humi); //向URL __delay_ms(50)增加湿度; printf(“\”\ r \ n“);//关闭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 =tempvariableh =humidityvariable

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

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

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

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

服务器端

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

安装apache2 php5 mysql- command mysql-server mysql-client phpmyadmin

安装成功完成后,我创建了一个带有myphpadmin的数据库。我不会详细介绍我的确,但我创建了一个名为的数据库Kajsa,一张桌子叫温度。该表有三列:哼哼,temp,时间。这tem列将填充来自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

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

jc_htsdwSIM900A-code.c.zip

你自己试试这个项目吧!BOM。

26评论