原创:DIY一部真正属于自己的手机
关注EEWORLD论坛这个活动很久了,从一开始就关注着,可惜那会正好报了驾校,准备考驾照。每天都得去驾校报告被教练骂。在驾校练车一练一上午,一练一下午,累得很,根本没有精力在来敲代码。 之后,看到大家都陆陆续续的参加了活动,用了STM32、TFT触摸屏等等,心里越发痒痒,也想自己DIY一个手机。现在正好有点空闲时间,可以来敲敲代码,DIY一下。
项目名称:DIY--手机
版 本:V1.0
硬 件:STC51 +LCD12864+SIM900
功 能:
1.打电话
2.游戏
3.闹钟
4.电子日历
没有群里各位大神那么高大上,我的要求不要太高,首先能打电话,其次再加一些小功能,比如游戏、闹钟、电子日历等等。功能不要太多,毕竟这是我的第一个版本,之后肯定会升级。
今天早上起晚了,没去看书,在宿舍把大概框架敲好了,也不知道活动哪天结束,毕竟已经开始很长时间了。管它了,反正我会把它进行到底。
借用锤子一句话:我不在乎输赢,我只是认真.....
上个图吧:
显示界面
菜单
这次DIY手机,用到的SIM900A是用AT指令进行通信的器件,之前从来没有接触过这方面的东西,怀一颗忐忑的心,不知道该怎么下手。从快递公司取回来模块后, 需要做的第一件事就是测试一下模块是不是可以正常工作。
先用USB转串口模块将SIM900A模块和电脑连接好,然后按照AT指令手册用上位机发送了几条指令,就好像是向SIM900A大喊:喂~~你能听到我说话么?SIM900A模块很快作出反应:我听到了~~于是,上面机界面显示出来了反馈信息,这样的话,已经可以正常的和SIM900A模块进行通信了,那试试拨号功能。发送指令拨打10086,很顺利的听到了熟悉的声音:欢迎致电中国移动~~~~~然后一堆废话,这样的话,模块是没有问题了,接下来就是用MCU来控制它了。
把它和单片机连起来。SIM900A模块和单片机的连接特别方便,因为用MCU的UART串行口,所以只需要两根数据线就可以了,即单片机的RXD、TXD分别和SIM900A模块的TXD.RXD相连接即可。
先进行最简单的测试---自动拨号
//串行口初始化:波特率9600
void init_UART(void)
{
TMOD=0x20;//定时器1操作模式2:8位自动重载定时器
TH1=0xfd;//装入初值,波特率9600
TL1=0xfd;
TR1=1;//打开定时器
SM0=0;//设置串行通讯工作模式,(10为一部发送,波特率可变,由定时器1的溢出率控制)
SM1=1;//(同上)在此模式下,定时器溢出一次就发送一个位的数据
REN=1;//串行接收允许位(要先设置sm0sm1再开串行允许)
EA=1;//开总中断
ES=1;//开串行口中断
}
复制代码
先写一个简单的发送函数
//串行口发送数据
void Uart_Send_string(uchar *str)
{
while(*str!='\0')
{
SBUF=*str;
while(!TI);//等待发送完成信号(TI=1)出现
TI=0;
str++;
}
}
复制代码
自动拨号,进行最最简单的测试
#include <REGX52.H>
#define uchar unsigned char
#define uint unsigned int
//以下是开机后拨打的手机号
uchar num[] = "ATD10086;\r";
void main()
{
init_UAR();//串行口初始化:波特率9600
while(1)
{
Uart_Send_string(num); //自动拨号
DelaySec(20); //延时20秒
Uart_Send_string("ATH\r"); //挂机
DelaySec(5); //延时5秒
}
}
复制代码
插入耳机,可以听到10086的声音,简单的测试就完成了。
这只是最最简单的测试,什么都不用管,直接自动拨号然后挂断。但是,实际应用的话用单片机和SIM900A进行通信的话会是这么简单么??肯定不是,实际情况会比这复杂得多得多,欲知后事如何,请听下回分解吧~~~~
这次DIY手机,用到的SIM900A是用AT指令进行通信的器件,之前从来没有接触过这方面的东西,怀一颗忐忑的心,不知道该怎么下手。从快递公司取回来模块后, 需要做的第一件事就是测试一下模块是不是可以正常工作。
项目名称:KaSuo Phone
版 本:V1.0
硬 件: STC89C516
LCD12864(ST7920)
SIM900A模块
功 能:
1.接/打电话
2.时钟
3.游戏
4.工具:闹钟、秒表、电子日历
5.设置:按键音设置、背光调节、情景模式
上图:
1.显示板
2.控制板
组合:
最后的整体图:
KaSuo Phone 介绍:
一。显示界面
显示时间、信号强度、电量信息
二。菜单界面
菜单又分为【拨号】、【时钟】、【游戏】、【工具】、【设置】、【版本】
原文及视频:http://bbs.eeworld.com.cn/thread-443790-1-1.html
以上图文内容均是EEWORLD论坛网友: 季夏木槿 原创,在此感谢。
欢迎微博@EEWORLD
如果你也写过此类原创干货请关注微信公众号:EEWORLD(电子工程世界)回复“投稿”, 也可将你的原创发至: bbs_service@eeworld.com.cn,一经入选,我们将帮你登上头条!
与更多行业内网友进行交流请登陆EEWORLD论坛。
基于STM32和SIM900A的网络多点远程数据监测系统设计
李驰1,段智敏1,丛培田1,张旗2
(1.沈阳理工大学 机械工程学院,辽宁 沈阳 110159;2.国网辽宁省电力有限公司营口供电公司,辽宁 营口 115000)
:针对工业上监测现场数据采集的远程网络传输需求,提出了一种基于STM32F103微控制器和SIM900A通信模块的网络多点远程数据监测系统。STM32下位机可以完成各传感器的周期性数据采集,并利用SIM900A模块实现其与远程上位机在GPRS网络上的不依赖监测现场网络环境的TCP数据通信。系统可以实现不间断对多个监测点的多个监测对象同时进行数据采集和远程数据传输。现场实验表明,该监测系统稳定性高、实时性强、测量误差小、功耗低,可以满足工业上的设计要求。
:数据采集;TCP;GPRS ;STM32;SIM900A
:TP27文献标识码:ADOI: 10.19358/j.issn.1674-7720.2016.24.030
引用格式 :李驰,段智敏,丛培田,等. 基于STM32和SIM900A的网络多点远程数据监测系统设计[J].微型机与应用,2016,35(24):105-108.
0引言
在工业中,数据的采集一直是生产过程中非常重要的环节,无论是机械的正常运转还是作业环境的保持,都离不开准确高效的数据采集技术。
基于嵌入式结构设计的数据采集系统一般采用RS232、RS485等串口的方式与上位机进行数据通信,虽然非常可靠,但受线缆限制,上位机必须保持在一定的距离内。而在某些高温、强腐蚀性环境下,线缆的布置比较困难,也容易损坏[1]。
随着科技的进步,移动通信技术迅猛发展,现在已经具有了非常高的稳定性,这也使移动通信技术在工业中应用成为可能。利用现有的GPRS网络,发挥其网络覆盖率高、传输特性好的优点,为原有的数据采集系统提供了一种方便的无线传输功能。移动通信技术具有布置灵活和可独立联网的优点[2]。
1总体设计
本文所设计的网络多点远程数据监测系统由下位机与上位机组成,下位机利用通信模块与GPRS网络直接连接,实现了基于TCP的不依赖现场网络环境的可靠网络数据传输。其不仅可以在上位机上单独查看各个终端上传的数据,还可以对多个终端的数据进行交叉分析,大大提高了采集效率和数据的利用率。
其中,下位机可大体分为STM32微控制器、SIM900A通信模块和多传感器三部分。整套设备的成本非常低廉,STM32微控制器与SIM900A通信模块组成的核心部件仅需几十元钱,用户可根据需求选择理想的传感器模块。上位机程序采用基于C++语言的Qt设计,下位机与上位机之间通过TCP协议传输网络数据,每台上位机均可以接收多个终端的传感器上传的数据。系统的总体设计框图如图1所示。
2硬件设计
网络多点远程数据监测系统可以完成几乎所有种类的数据采集。因篇幅有限,本文以温度数据采集为例介绍整个系统的框架结构以及具体实现方法。 其他种类的数据采集,设计逻辑与温度数据采集基本相同,只需在下位机主程序循环中加入相应传感器的采集子程序和数据发送流程即可。
远程设备被安装在监测现场上,其通过各种传感器采集数据,经STM32微控制器处理发送至SIM900A通信模块,通信模块会通过端口将TCP数据从GPRS网络发送给上位机。上位机根据设备号的不同区别各个下位机。该系统的硬件电路图如图2所示。
2.1STM32F103ZET6微控制器
STM32F103ZET6增强型微控制器使用高性能的ARM CortexTM-M3 32位的RISC内核,工作频率为72 MHz,其具有112个GPIO接口,多种复用功能,具有非常高的可开发性[3]。
它的综合性能高,运行稳定,价格便宜,在工业应用中广为使用,是很多工程项目的理想解决方案[4]。
2.2SIM900A通信模块
无线通信模块采用SIM900A芯片实现,主要负责实现与远程终端的数据传输功能。SIM900A模块是一款尺寸紧凑、内置TCP/IP协议栈的GSM/GPRS模块[5]。
2.3DS18B20温度传感器
DS18B20是美信公司的一款温度传感器,单片机可以通过1Wire协议与DS18B20进行通信[6]。
3软件设计
本文所设计的系统由下位机程序与上位机程序两部分组成。其中下位机STM32程序负责数据采集以及定时将各种数据以TCP协议经由SIM900A模块发送给上位机。而上位机程序负责监听各端口TCP通信,处理由端口传入的TCP数据。
3.1下位机程序设计
下位机程序由主程序、发送TCP数据子程序和测量温度子程序三部分组成,均通过C语言进行设计。三个模块合作完成数据采集和上传工作。
3.1.1主程序
STM32主程序负责初始化各寄存器以及周期性地调用各功能子程序以采集数据并将采集到的数据通过GPRS网络发送给各上位机。这里需要注意的是,图3主程序流程图STM32微控制器的GPIO口和复用功能均有独立的时钟,使用前必须进行初始化,否则各外设无法正常工作。SysTick时钟用来产生心跳中断,实现延时功能。其系统流程图如图3所示。
3.1.2 发送TCP数据子程序
SIM900A通信模块采用串行接口与STM32进行通信。STM32应用AT指令与SIM900A通信[7]。本文主要应用SIM900A的TCP通信功能,涉及关于TCP协议的主要指令如表1所示。
跟据AT指令以及相应的指令格式,数据发送子程序的流程如图4所示
3.1.3测量温度传感器子程序
DS18B20温度传感器采用1Wire协议与STM32微控制器进行通信,它只有一个DQ引脚负责传递数据,具有非常复杂的软件时序。其程序流程图如图5所示。
3.2上位机程序设计
本文所设计的上位机系统采用Qt设计,它是一个跨平台的C++图形用户界面应用程序框架。它为应用程序开发者提供建立艺术级图形用户界面所需的所有功能。它是完全面向对象的,很容易扩展,并且允许真正的组件编程[8]。只需要编写一次应用程序,就可以在不同操作系统上部署这些程序。
Qt通过信号和槽的机制来完成两个Qt对象之间的通信。信号会在某个时机触发,而槽就是响应和处理信号的对应函数[9]。
3.2.1 ReceivedData类
上位机程序的核心是ReceivedData类,它是一个继承自QWidget类的自定义类。每个ReceivedData类对象对应一个端口,负责接收和处理不同下位机传输的TCP数据并完成数据在图表上的显示工作。
ReceivedData类中主要包含一个QCustomPlot类对象、一个QTcpServer类对象和一个QTcpSocket类对象。QCustomPlot类是一个体积小巧但功能很强的Qt绘图类,它提供给程序一个绘制图表的窗口,使用者可以通过对参数的设置在一个窗口内很容易地实现多条曲线绘制、鼠标拖曳滚轮缩放图像等功能。而QTcpServer类和QTcpSocket类对象的组合可以完成指定端口的TCP数据接收。ReceivedData类的主要构成如表2所示。
3.2.2TCP协议通信处理流程
Qt通过套接字完成TCP数据的传输,在接收到连接请求后TCP服务器会把新的连接绑定到套接字上。作为TCP服务器的上位机与作为TCP客户端的下位机交互流程图如图6所示。
4实验结果
分别在两个地点布置下位机系统,连接各传感器后开启下位机电源,上位机开始从指定端口接收到TCP数据。经过一段时间的监测,从远程的上位机处得到了监测数据的曲线。
图7展示了上位机远程监测两台下位机数据的运行效果,从当前图中可以清楚地看出两个监测地点的温度随时间的变化情况,通过组合框可以切换监测源的监测对象。上位机界面中包括两路通道,分别接收两个下位机上传的数据,多路数据监测界面的设计原理与其相同,只需按要求实例ReceivedData类对象就可以完成指定数量下位机的数据监测。
5结论
本文所设计的数据采集系统是一种非常适合复杂现场环境和临时测量的解决方案。这种测量终端与上位机没有距离限制并且节省了大量的人力物力,只要双方可以连接互联网就可以完成数据传输。在物联网技术迅猛发展的今天,这种结合了GPRS网络的远程数据采集系统非常具有实用价值。
参考文献
[1] 王志义,苗亚春.有线传输技术特点分析和发展方向[J].电子工程技术与软件工程,2013(17):193193
[2] 李阳辉.基于STM32和GSM的温度远程监控系统设计[J].自动化与仪器仪表,2015(1):5659.
[3] 卢有亮.基于STM32的嵌入式系统原理与设计[M].北京:机械工业出版社,2014.
[4] YIU J. ARM CortexM3与CortexM4权威指南[M].吴常玉,曹孟娟,王丽红,译.北京:清华大学出版社,2015.
[5] 甘志伟,闫凯.基于SIM900A的无线数据采集卡设计与实现[J].山西电子技术,2013(1):5558.
[6] 宋雪松,李冬明,崔长胜.手把手教你学51单片机:C语言版[M].北京:清华大学出版社,2014.
[7] 郑优讯,李宗伯.基于STM32微处理器的GPRS数据传输技术的研究[J].微型机与应用,2012,31(21):6164.
[8] 陆文周.Qt5开发及实例(第2版)[M].北京:电子工业出版社,2015.
[9] 金大臣尔.Qt5开发实战[M].张红艳,译.北京:人民邮电出版社,2015.
相关问答
sim900a 参数?1、SIM900A模块支持RS232串口和LVTTL串口。保留了232口,在学习或者开发时可以监听51低端单片机和模块指令执行情况,能更快的找出原因,节省开发和学习的时间。...
各位友友们,请问我用mic29302芯片给 sim900A 供电时,开机不到10秒就自动关机了这是怎回事?您好,看看电压输出Vout=1.24*(1+100/34)=1.24*3.9=4.89V将34K改为43K,计算下Vout=1.24*(1+100/43)=1.24*3.32=4.12V不知我的回...
vivox20A 参数 - 东阙ll 的回答 - 懂得可以查看以下vivoX20参数知识:操作2113系统:FuntouchOS3.2(基于5261Android7.1.1)屏幕:6.01英寸SuperAMOLED全面屏,分辨率2160*1080拍照:2...
iqoo10参数配置详细情况-ZOL问答RAM类型:LPDDR5四通道ROM类型:UFS3.1双电芯,典型容量:2350毫安时(7.74V),等效于4700毫安时(3.87V)典型能量:18.18Wh双电芯,额定容量:2275毫安时(...
cpu天玑 900 好不好?一、天玑900怎么样1、制作工艺在芯片的制作工艺方面是骁龙780G更好,为用户提供更好的手机芯片的散热功能,可以为用户提供更加轻巧的芯片体积2、CPU架构方面...
GPRS DTU模块的时延是多少毫秒呢?DTU采用个TCPIP协议会有重传机制的。理想情况是串口接受数据后,发给服务器,客户端再访问服务器。数据发送的时间不同厂家有差异,比如simcom的SIM900,l...
iPhone XR的芯片是 A 多少? - 135****2188 的回答 - 懂得SoC:苹果A12处理器,21137nm工艺屏幕:6.1英寸5261LCD屏丨分辨率1792x828丨屏占比79.3%存储:3GBRAM+64GBROM前置4102:前置700万像素摄像头+红外摄16...
a 1k是什么手机型号?OppoA1k设计:尽管Realme现在是一个独立的公司,没有否认了OPPOA1K多么相似的RealmeC2(评论)。这两款手机的形状几乎相同,而尺...称为OppoA1K。该设备配备.....
oppoa83 a 配置参数?型号oppoA83a手机类型4G手机,智能手机,八核手机操作系统Android,Android7.1硬件参数CPU品牌联发科(MTK)CPU联发科MT6763TCPU频率2...
手机上显示G是什么意思 - 球妈家 的回答 - 懂得手机屏幕右上方显示G字母,该类图标代表您当前手机SIM卡所在网络。“G”表示您当前手机SIM卡所在的网络是2G网络。手机信号上的“G”指的是第二代通...