找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1962|回复: 0
打印 上一主题 下一主题
收起左侧

关于利用GSM模块上传三路温湿度数据到onenet 没任何反应,仅仅可以发短信

[复制链接]
跳转到指定楼层
楼主
ID:279295 发表于 2020-4-29 21:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
利用GSM模块上传数据到onenet,没任何反应,仅仅可以发短信。

程序:
  1. #include "reg52.h"
  2. #include "type.h"
  3. #include <string.h>
  4. #include <stdio.h>

  5. bit flag;
  6. uchar model=0;  //模式

  7. uchar temp1H=35; //上限值
  8. uchar temp2H=35; //上限值
  9. uchar temp3H=35; //上限值
  10. uchar hum1H=50; //上限值
  11. uchar hum2H=50; //上限值
  12. uchar hum3H=50; //上限值
  13. uchar temp_L=10;
  14. uchar  date[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
  15. unsigned char temp1=0,temp2=0,temp3=0,hum1=0,hum2=0,hum3=0;
  16. #define SEND_MESSA_TO_YOUR "at+cmgs=\"185*****436\"\r\n"    //填入你手上的手机号码 不是板子的

  17. #include "LCD1602.H"
  18. sbit set=P1^6;
  19. sbit add=P3^5;
  20. sbit min=P3^4;
  21. sbit beep=P3^6;
  22. sbit led1=P1^2;
  23. sbit led2=P1^1;

  24. /***********模拟开关*********************/
  25. sbit CS_4052=P1^0;
  26. sbit B_4052=P1^1;
  27. sbit A_4052=P1^2;
  28. uchar fen=0; //定时发送短信计时
  29. bit sendFlag=0; //发送短信标志
  30. void delay1ms(unsigned int ms)//延时1毫秒(不够精确的)
  31. {unsigned int i,j;
  32.    for(i=0;i<ms;i++)
  33.     for(j=0;j<100;j++);
  34. }
  35. void Uart_Send(uchar dat)     //发送一字节   
  36. {
  37.   SBUF=dat;
  38.   while(!TI);
  39.   TI=0;
  40. }
  41. //发送一串字符到串口
  42. void Uart_Sends(char* data_at)  
  43. {
  44.     unsigned char cnt=0;
  45.     while(*(data_at+cnt))    //判断一串数据是否结束
  46.     {
  47.         Uart_Send(*(data_at+cnt));
  48.         cnt++;
  49.     }
  50.         
  51. }
  52. void select(uchar num)        
  53. {
  54.   if(num==1)     //上位机串口使能
  55.     {
  56.      CS_4052=0;
  57.      B_4052=0;
  58.      A_4052=0;
  59.     }
  60. else  if(num==2)     //CC2530串口使能
  61.     {
  62.      CS_4052=0;
  63.      B_4052=0;
  64.      A_4052=1;
  65.     }
  66. else  if(num==3)     //wifi串口使能
  67.     {
  68.      CS_4052=0;
  69.      B_4052=1;
  70.      A_4052=0;
  71.     }
  72. }
  73. //发送短信函数
  74. void Send_SMS(void)
  75. {
  76.     uchar yy=1;
  77.    
  78.   select(1);    //GSM模块串口使能
  79.     delay1ms(100);
  80.     Uart_Sends("AT+CMGF=1\r");//设置中文方式发送
  81.     delay1ms(800);
  82.     delay1ms(1000);
  83.     Uart_Sends(SEND_MESSA_TO_YOUR);                                                                                             
  84.     delay1ms(1000);   
  85. switch (yy)                                             
  86. {                                                
  87.    
  88.   case 1 : Uart_Sends("wendu1=\r\n");                                   
  89.            Uart_Send(temp1/10+0x30);
  90.            Uart_Send(temp1%10+0x30);
  91.            Uart_Sends(",wendu2=");
  92.            Uart_Send(temp2/10+0x30);
  93.            Uart_Send(temp2%10+0x30);
  94.            Uart_Sends(",wendu3=");
  95.            Uart_Send(temp3/10+0x30);
  96.            Uart_Send(temp3%10+0x30);
  97.            Uart_Sends("\r\nshidu1=\r\n");     
  98.            Uart_Send(hum1/10+0x30);
  99.            Uart_Send(hum1%10+0x30);
  100.        Uart_Sends(",shidu2=");
  101.            Uart_Send(hum2/10+0x30);
  102.            Uart_Send(hum2%10+0x30);
  103.        Uart_Sends(",shidu3=");
  104.            Uart_Send(hum3/10+0x30);
  105.            Uart_Send(hum3%10+0x30);
  106.            Uart_Sends("\r\n");
  107.              if(temp1>temp1H)
  108.              {
  109.               Uart_Sends("wendu1 Warning!!!\r\n");
  110.              }
  111.              if(temp2>temp2H)
  112.              {
  113.               Uart_Sends("wendu2 Warning!!!\r\n");
  114.              }
  115.              if(temp3>temp3H)
  116.              {
  117.               Uart_Sends("wendu3 Warning!!!\r\n");
  118.              }
  119.              if(hum1>hum1H)
  120.              {
  121.               Uart_Sends("hum1 Warning!!!\r\n");
  122.              }
  123.              if(hum2>hum2H)
  124.              {
  125.               Uart_Sends("hum2 Warning!!!\r\n");
  126.              }
  127.              if(hum3>hum3H)
  128.              {
  129.               Uart_Sends("hum3 Warning!!!\r\n");
  130.              }            
  131.             
  132.          
  133.             break;    //烟雾报警
  134.   
  135. }                                       
  136.                              
  137.    Uart_Send(0x1a);//以0x1a来结束,表示内容结束,发送短信            
  138.                                                                   
  139. }
  140. void key()
  141.   {
  142.         uchar i=0;
  143.         
  144.    if(!set) //检测设置按键
  145.      {
  146.       while(!set);
  147.       model++;
  148.      if(model==7)
  149.       {
  150.          model=0;   
  151.       }
  152.      if(model==1)//设置模式显示
  153.      {
  154.           WRITE_LCD1602_COM(0x80);
  155.         for(i=0;i<16;i++)
  156.             WRITE_LCD1602_DAT(DIS_TAB3[i]);
  157.             WRITE_LCD1602_COM(0x80+0x40);
  158.             for(i=0;i<16;i++)
  159.             WRITE_LCD1602_DAT(DIS_TAB4[i]);
  160.             WRITE_LCD1602_COM(0x80+0x40+9);
  161.      }
  162. else if(model==0)//正常模式显示
  163.   {   
  164.           WRITE_LCD1602_COM(0x80);
  165.       for(i=0;i<16;i++)
  166.             WRITE_LCD1602_DAT(DIS_TAB1[i]);
  167.             WRITE_LCD1602_COM(0x80+0x40);
  168.             for(i=0;i<16;i++)
  169.             WRITE_LCD1602_DAT(DIS_TAB2[i]);
  170.             WRITE_LCD1602_COM(0x80+0x40+9);   
  171.     }
  172.      
  173.    
  174.       
  175.      }
  176. else  if(!add)
  177.     {
  178.      while(!add);
  179.      switch(model)
  180.        {
  181.      case 1: if(temp1H<90) temp1H++;        break;
  182.        case 2: if(temp2H<90) temp2H++;        break;
  183.        case 3: if(temp3H<90) temp3H++;       break;
  184.          case 4: if(hum1H<90)  hum1H++;        break;
  185.          case 5: if(hum2H<90)  hum2H++;        break;
  186.          case 6: if(hum3H<90)  hum3H++;        break;
  187.          default:break;
  188.        }

  189.    
  190.     }
  191. else   if(!min)
  192.     {
  193.      while(!min);
  194.      switch(model)
  195.        {
  196.        case 1: if(temp1H>0) temp1H--;        break;
  197.        case 2: if(temp2H>0) temp2H--;        break;
  198.        case 3: if(temp3H>0) temp3H--;        break;
  199.          case 4: if(hum1H>0)  hum1H--;        break;
  200.          case 5: if(hum2H>0)  hum2H--;        break;
  201.          case 6: if(hum3H>0)  hum3H--;        break;
  202.          default:break;
  203.        }

  204.    
  205.     }
  206.   
  207.   }
  208.      void beeps()
  209.       {
  210.       static uchar count;
  211.       count++;
  212.       if(count<20)
  213.       beep=0;
  214. else if(count<40)      
  215.       beep=1;
  216.       else
  217.       count=0;
  218.       
  219.       }

  220.      void control()//报警检测控制
  221.       {
  222.      static uchar flagsend=0;
  223.             
  224.           if((temp1>temp1H)||(temp2>temp2H)||(temp3>temp3H)||
  225.                 (hum1>hum1H)||(hum2>hum2H)||(hum3>hum3H))     //温度控制
  226.            {
  227.              beeps();      // 蜂鸣器报警
  228.               if(flagsend==0)   
  229.                 {   
  230.                flagsend=1;            
  231.                   Send_SMS();
  232.                 }
  233.            }
  234.         else  
  235.            {
  236.                 flagsend=0;     
  237.             beep=1;// 关闭蜂鸣器报警
  238.            }

  239.       }


  240.    void rec_cc2530data()
  241.    {
  242.         select(2);      //选通 cc2530 串口
  243.      ES=1; //串口接收中断
  244.     if(date[0]==0x55)
  245.     {   
  246.          date[0]=0;
  247.          if((date[1]==1)&&(date[2]+date[3]==date[4]))      //第一路    数据
  248.          {
  249.           date[1]=0;
  250.           temp1=date[2];
  251.           hum1=date[3];
  252.          }
  253.           if((date[1]==2)&&(date[2]+date[3]==date[4]))  //第二路
  254.          {
  255.          date[1]=0;
  256.           temp2=date[2];
  257.           hum2=date[3];
  258.          }
  259.           if((date[1]==3)&&(date[2]+date[3]==date[4]))   //第三路
  260.          {
  261.           date[1]=0;
  262.           temp3=date[2];
  263.           hum3=date[3];
  264.          }
  265.      
  266.     }
  267.    
  268.    }
  269.      

  270.      
  271.        void GsmInit()
  272.    {
  273.        select(1); //打开上位机串口
  274.           Uart_Sends("AT+CIPCLOSE\r\n");
  275.        delay1ms(1000);
  276.        Uart_Sends("AT+CIPSHUT\r\n");
  277.        delay1ms(1000);
  278.        Uart_Sends("AT+CREG?\x00D\x00A");
  279.        delay1ms(1000);
  280.     Uart_Sends("AT+CGATT=1\r\n");
  281.     delay1ms(1000);
  282.          Uart_Sends("AT+CIPRXGET=0\r\n");
  283.       delay1ms(1000);
  284.           Uart_Sends("AT+CSTT=CMIOT\r\n");
  285.          Uart_Sends("AT+CIICR\r\n");
  286.       delay1ms(1000);
  287.          Uart_Sends("AT+CIPRXGET=0\r\n");
  288.     delay1ms(1000);
  289.     Uart_Sends("AT+CIPQRCLOSE=1\r\n");
  290.     delay1ms(1000);
  291.     Uart_Sends("AT+CIPMODE=0\r\n");
  292.          delay1ms(1000);
  293.          Uart_Sends("AT+CIPSTART=\"TCP\",\"183.230.40.33\",\"80\"\r\n");//此处修改你建立服务器的IP,服务器端口号8080
  294.          delay1ms(1000);
  295. //         Uart_Sends("AT+CIPSEND\r\n");
  296. //         delay1ms(1000);
  297.          //SendString("POST /devices/1100286/datapoints?type=3 HTTP/1.1\r\n");
  298.     Uart_Sends("POST /devices/594614665/datapoints?type=3 HTTP/1.1\r\n");    //将数字修改为自己的设备id)
  299.     delay1ms(1000);            
  300.    
  301.     Uart_Sends("Host:api.heclouds点com\r\n");
  302.     delay1ms(1000);                    
  303.    
  304.     //SendString("api-key:DcQ2NF=70s3j3=mlsFXfPod1kaY=\r\n");
  305.     Uart_Sends("api-key:  RJPjiEVRqddktp2OP5mbn=qiWWI=\r\n");     //这里填写自己的API-key
  306.     delay1ms(1000);        
  307.    }
  308. void SendGprsData(uchar *sendbuf)   //ADD
  309. {
  310.         unsigned char lenbuf[4];
  311.         select(1);
  312.         delay1ms(1000);   
  313.         Uart_Sends("AT+CIPSEND=");
  314.         sprintf(lenbuf,"%d",strlen(sendbuf));
  315.         Uart_Sends(lenbuf);
  316.         Uart_Sends("\r\n");
  317.         delay1ms(1000);
  318.         Uart_Sends(sendbuf);
  319.       Uart_Sends(0x1a);//ADD
  320.       delay1ms(1000);
  321. }

  322.      void Timer0Init(void)        //50毫秒@11.0592MHz
  323. {
  324.      
  325.     TMOD &= 0xF0;        //设置定时器模式
  326.     TMOD |= 0x01;        //设置定时器模式
  327.     TL0 = 0x00;        //设置定时初值
  328.     TH0 = 0x4C;        //设置定时初值
  329.     TF0 = 0;        //清除TF0标志
  330.     TR0 = 1;        //定时器0开始计时
  331.     ET0=1;
  332. }
  333. bit SendGprsFlag=0,GsmInitFlag=0;
  334. idata unsigned char SendBuf[26];
  335. void main()
  336. {
  337.    
  338.     init_1602();
  339.     TMOD=0x20;     // T1定时方式2
  340.     SCON=0x40;//串行工作 方式1
  341.     PCON=0x00; //不加倍
  342.     TH1=TL1=0xfd; //定时器1赋初值  保证波特率9600
  343.     TR1=1;          //开定时器1
  344.     REN=1;          //允许串口接收
  345.     ES=1;          //打开串口中断
  346.     EA=1;          //开总中?

  347.     Timer0Init();
  348.     GsmInit();    //sim800初始化 ******ADD
  349.     while(1)
  350.     {
  351.          
  352.          control(); //控制
  353.          key();   //按键功能
  354.        if(SendGprsFlag==1)     //1一分钟向GPRS发送一次数据
  355.            {
  356.                  SendGprsFlag=0;    //ADD
  357.               if(GsmInitFlag==0)
  358.               {
  359.                  GsmInitFlag=1;
  360.                   GsmInit();         //H1:50%,
  361.               }                     //T1:23C,
  362.               sprintf(SendBuf,"T1:%2dC,T2:%2dC,T2:%2dC\r\n",(unsigned int)temp1,(unsigned int)temp2,(unsigned int)temp3);
  363.               SendGprsData(SendBuf);
  364.               delay1ms(1000);
  365.               sprintf(SendBuf,"H1:%2%%,H2:%2%%,H3:%2%%\r\n",(unsigned int)hum1,(unsigned int)hum2,(unsigned int)hum3);
  366.               SendGprsData(SendBuf);
  367.            }

  368.           if(sendFlag==0)
  369.             {
  370.             sendFlag=1; //代表已经发过一次,不在发了
  371.             Send_SMS(); //发送短信
  372.             }
  373.          
  374.               rec_cc2530data();
  375.               delay1ms(50);
  376.             display();
  377.     }

  378. }

  379.    void serial()interrupt 4        //串口中断服务函数
  380.   {
  381.    static uchar j;
  382.    
  383.    if(!RI);
  384.    RI=0;            //清楚接收完毕标志
  385.    date[j]=SBUF;
  386.    if(date[0]==0x55)  //判断接收到的第一位为传感器所发数据
  387.       j++;
  388.   else
  389.       j=0;


  390.    if(j==5)           //接收传感器所发数据字节
  391.      j=0;
  392.   
  393.    
  394.   }
  395. void timer0() interrupt  1 //50ms
  396. {
  397. static uchar count=0,miao=0;
  398.    
  399.   TL0 = 0x00;        //设置定时初值
  400.     TH0 = 0x4C;        //设置定时初值
  401.   count++;
  402.     if(count>20)
  403.     {
  404.         count=0;
  405.        miao++;
  406.         if(miao>60)
  407.         {
  408.             
  409.             miao=0;
  410.           fen++;
  411.             if(fen>=1)
  412.             {
  413.               fen=0;
  414.                 sendFlag=0;
  415.             }
  416.         }
  417.         
  418.     }

  419. }
复制代码

接收机-程序.zip

102.51 KB, 下载次数: 9

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表