完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
昨晚发的帖子刚好遇上论坛被攻击,现在重新发一次,
要求:第一,通过GSM模块实现无线远程控制水阀的开关。 第二,能够设置灌溉的起始时间。 第三,能够自动检测温度与湿度,定时发送给用户。 以上功能已经全部实现。是帮一个学长做得毕设,第二部,短信设置起始时间是难点,后来去请教老师才出来。 strpos 是精华啊! 一下为用到的模块 :(还有一个可控水阀没贴出来,继电器控制,所以只需控制51IO口就可以控制水开关了) [C] 纯文本查看 复制代码 #include 第一次发分享贴,原子哥给个COOL把! GSM_2015-3-29-2下午(最终版).zip (38.17 KB ) |
|
相关推荐
12个回答
|
|
说好的COOL呢
|
|
|
|
楼主 ,能不能说说你的东西 大概的工作流程?
|
|
|
|
怀疑是你硬件问题
你开机启动GSM 打电话进去你放在GSM的电话卡 通-硬件没问题 不通(关机,不在服务区之类)-肯定是硬件问题了 对于硬件问题, 特别注意不要用4G卡和 电信卡 通了之后程序还是不行? 1.可能是接线问题,你看下下面那个pdf怎么接 2.强烈建议用 串口调试 再烧程序 ATK-SIM900A模块使用说明_AN1305.pdf (4.79 MB ) 51控制GSM发英文短信(20s一次).zip (42.39 KB ) |
|
|
|
实验没做到,不过应该不难,就是麻烦点
|
|
|
|
大师。帮我SIM900控制灯泡的程序有点问题,本人qq:1804738504
|
|
|
|
一步步调,不要急。
1. 注意看说明,要用移动,联通的非4G卡 2.用电脑串口调试 AT指令,看是哪里出问题,开机? 发短信?收短信? 3. 第二步都没问题, 那就用 单片机控制 收发,参考我上面程序,基本功能就实现了, |
|
|
|
/*=================================== 程序名:GPS模块实现短信控制灯泡 开发者:MTMORI007 开发时间:2015-7-1 ===================================*/ #include #include #define uchar unsigned char #define uint unsigned int #define Rx_data_length 110 uchar Admin_num[11]="1538495xxxx"; //手机号码 uchar i,j; uchar aa,jj; ***it C_LED1=P3^2;//继电器指示灯引脚定义 ***it C_JDQ1=P3^3;//继电器引脚定义 ***it C_LED2=P3^7;//继电器指示灯引脚定义 ***it C_JDQ2=P2^0;//继电器引脚定义 bit Response_receive_SMS_flag=0; uchar Rx_bit,i; uchar xdata Rx_data[Rx_data_length]; void Response_receive_SMS(void); void Uart_SendChar(uchar ch); void Uart_SendString(uchar *String); void uart_init(uint p); void Clear_Rxdata(uchar length); void delay(uint xms) { uint i,j; for(i=xms;i>0;i--) for(j=100;j>0;j--); } void main(void) { uint aa=0; EA=1;//开总中断 uart_init(1);//串口初始化 Rx_bit=0; delay(3000); //Uart_SendString("AT+CLIP=1rn"); //delay(500); //Uart_SendString("AT+CMGF=1rn"); //设置sim900模块为英文方式发送短信 //delay(500); Uart_SendString("AT+CMGD=1rn");//清除所有短信 delay(500); Uart_SendString("AT+CSCS="GSM"r"); //设置sim900模块GSM字符集 delay(500); Uart_SendString("AT+CMGF=1r"); //设置sim900模块为英文方式发送短信 delay(500); Clear_Rxdata(Rx_data_length); delay(500); memset(Rx_data,' ',sizeof(Rx_data));//Rx_data数组中元素都为空格 while(1) { EA=1; EX0=1;//开外部中断0 IT0=0;//脉冲触发方式 Response_receive_SMS(); //循环检测是否收到短信,若收到短信则 Response_receive_SMS_flag==1 delay(100); Rx_bit=0; if(Response_receive_SMS_flag==1) { Uart_SendString("AT+CMGR=1rn"); //短信读取 delay(2000); if(Rx_data[61]=='o'&&Rx_data[62]=='p'&&Rx_data[63]=='e'&&Rx_data[64]=='n'&&Rx_data[65]=='1') //判断的短信内容,可以不止5位 { aa=1; PC_LED1=0; PC_JDQ1=0; } else if(Rx_data[61]=='c'&&Rx_data[62]=='l'&&Rx_data[63]=='o'&&Rx_data[64]=='s'&&Rx_data[65]=='e'&&Rx_data[66]=='1') //判断的短信内容,可以不止5位 { aa=1; PC_LED1=1; PC_JDQ1=1; } else if(Rx_data[61]=='o'&&Rx_data[62]=='p'&&Rx_data[63]=='e'&&Rx_data[64]=='n'&&Rx_data[65]=='2') //判断的短信内容,可以不止5位 { aa=1; PC_LED2=0; PC_JDQ2=0; } else if(Rx_data[61]=='c'&&Rx_data[62]=='l'&&Rx_data[63]=='o'&&Rx_data[64]=='s'&&Rx_data[65]=='e'&&Rx_data[66]=='2') //判断的短信内容,可以不止5位 { aa=1; PC_LED2=1; PC_JDQ2=1; } Response_receive_SMS_flag=0; Clear_Rxdata(Rx_data_length); delay(100); Uart_SendString("AT+CMGD=1rn"); //清除所有短信 delay(100); } //delay(1000); //if(aa==1) //{ //delay(1000); //Uart_SendString("AT+CMGS=""); //for(j=0;j<11;j++) //{ //SBUF=Admin_num[j]; //while(TI==0); //TI=0; //} //Uart_SendString(""r"); //delay(200); //Uart_SendString("YES"); //返回的短信内容 //delay(300); //Uart_SendChar(0x1a); //delay(1000); //aa=0; // } } } void uart() interrupt 4 { ES=0; if(RI==1) //当硬件接收到一个数据时,RI会置位 { if(SBUF!=0x0d&&SBUF!=0x0a&&SBUF!=' ')//去除所有的空格 { Rx_data[Rx_bit]=SBUF; Rx_bit++; } if(Rx_bit==Rx_data_length) { Rx_bit=0; } RI=0; } ES=1; } void Response_receive_SMS(void) { uchar i=0; for(i=0;i<=Rx_data_length;i++) { if(Rx_data =='+' &&Rx_data[i+1]=='C' &&Rx_data[i+2]=='M' &&Rx_data[i+3]=='T' &&Rx_data[i+4]=='I' &&Rx_data[i+5]==':') //判断是否接受短信 { Response_receive_SMS_flag=1; return; } } Response_receive_SMS_flag=0; } /******************************************************************** * 名称: Uart_SendChar(uchar ch) * 功能: 向串口发送一个字符 * 输入: 无 * 输出: 无 ***********************************************************************/ void Uart_SendChar(uchar ch) { SBUF=ch; while(TI==0); TI=0; } /******************************************************************** * 名称: Uart_SendChar(uchar ch) * 功能: 向串口发送一个字符串 * 输入: 无 * 输出: 无 ***********************************************************************/ void Uart_SendString(uchar *String) { while (*String !=' |