在本文中,我将向您展示我如何使用我的一个 sim900a gsm 模块将温度和相对湿度发送到我的个人网站。
我希望能够监测船上的温度和湿度,并在我的网页上查看数据。不幸的是,我的船所在的码头没有 wi-fi 信号。这就是 sim900a gsm 模块派上用场的地方。sim900a gsm 模块能够发送 sms 消息并连接到 internet 并发送数据。就我而言,它正在发送温度和湿度数据。
我希望将数据显示在一个带有两个条形图的图表中。我在网上搜索了一些可以给我想要的图表的免费库。我选择的是这个: elliott brueggeman 的 phpgraphlib。它是一个基于 php 的轻量级开源图形库。
最近的九个读数;最右边的第十个是启动数据。
所需物品
要完成此项目,您将需要以下内容:
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。
为了 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 来测量电池电压并将其发送到网页。
(左)在电路串行编程块;(右)振荡器模块。我正在以 8mhz 运行 pic。
(左)这是 dht11 传感器的连接方式。c8 直接焊接到模块的电源引脚上,因为它应该尽可能靠近模块。(右)我没有打开和关闭 pic,而是添加了一个两针连接器;这些连接将允许我使用常开按钮来重置 pic。
(左)16×2 lcd;(右)sim900a 模块的连接。
单击此处获取原理图的高分辨率图像。
这是我组装的一些照片:
这是电路的面包板版本。
完整的项目。
我使用墨粉转移方法将电路板布局放到 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 的数据。
点击放大。
服务器上的代码
要将数据输入数据库,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 数据库,提取相关数据,并创建图表。
企业如何借助人工智能改变增长方式
中航光电高压小电流EVH2系列产品介绍
汇川技术助力汽车制造业大批量多品种柔性化生产
SD协会近期宣布了一项名为microSD Express的新标准
怎样学习摩尔斯电码
如何使用SIM900A将传感器数据发送到网站
空闲任务钩子函数详解
腾讯最新研发智慧城市加速器正式启动全球招募
华为发布Digital strategy助力运营商数字化转型
分享两个电源电路的原理及PCB布板方式
魅族Pro7也开始抄袭锤子手机了,老罗又该吐槽了
伺服系统什么意思_伺服系统的作用是什么
超级充电器重大突破:手机30秒满血复活!
三星Galaxy A21渲染图曝光,搭载深度传感器和双LED闪光灯
基于远程数据处理的智慧城市机器人视觉SLAM
物联网全栈教程-从云端到设备(一)
西欧Q3手机市场报告公布:三星位居榜首
人工智能时代,分销商如何帮助改变世界?
tda2822m中文资料汇总(tda2822m引脚图及参数_内部结构及应用电路)
智能魔镜,将是智能家居市场下一个角逐点!