搜索
bottom↓
回复: 19

怎么通过GSM把温度发送到手机上啊

[复制链接]

出0入0汤圆

发表于 2010-10-6 23:54:19 | 显示全部楼层 |阅读模式
最近在弄GSM模块,型号是西门子的TC35I,我能实现中文短信和英文短信的收发,这些短信都是内容固定的,打电话接电话,但不知道怎么把测得的温度值发送出去,因为温度是变的,所以不知怎么去把这可变的温度以短信内容发送出去,请各位高手指教,帮指点下,感激不尽。本论坛我也查了相关GSM的主题,但没有说到怎么把可变的温度值发送出去,各位大虾救命啊!!!

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2010-10-7 07:48:05 | 显示全部楼层
你能自已编写短信,就可以改变短信内容.

出0入0汤圆

发表于 2010-10-7 08:56:15 | 显示全部楼层
"小样穿上马甲就不认识啦。" 开个玩笑。   变化的数字用查表法。

出0入0汤圆

发表于 2010-10-7 09:19:54 | 显示全部楼层
#define max_disp_len 6

//digit 为所需显示的小数点后多少位
//最大显示宽度不包括小数点
//返回字符串中的字符数目
unsigned char float_to_string (float f_DATA,unsigned char digit,char *string)
{
  unsigned long data;
  unsigned char a[max_disp_len],i=0,j=0,negative = 0;
  if ( f_DATA < 0 )
  {  
     negative =1;
     f_DATA = (-f_DATA);
  }
  for ( i=0;i<digit;i++ )
  {   
      f_DATA *= 10;
  }
  data = f_DATA;
  for ( i=0;i<max_disp_len;i++ )
  {  
      a[max_disp_len-1-i] = data%10;
      data /= 10;
  }

  if ( negative )
  {
     string[j++] = '-' ;
  }
  for ( i=0; ;i++ )
  {   
      if (i == max_disp_len - digit)
      {
         string[j++] = '0';
         break;
      }
      else if (a != 0)
      {
         break;
      }
  }

  for ( ;i<max_disp_len;i++)
  {
      if ((max_disp_len-i) == digit)
      {
         string[j++] = '.';
      }
      string[j++] = a + '0';
  }
  string[j] = '\0';
  return j;
}

出0入0汤圆

 楼主| 发表于 2010-10-7 10:33:59 | 显示全部楼层
这是我编的发送中文的短信,内容是固定的,但内容不固定的就不会了,比如温度,谢谢楼上的指点,谁还能指点我下吗?
/**********************************************

                        GSM_TC35I_中文短信发送程序测试

程序功能:发中文短信
晶振:11.0592M
版本:V1.0
作者:*****
日期:2010-10-4
应用软件:keil3

**********************************************/
#include <reg52.h>
#include <string.h>
#include <stdio.h>

#define uint unsigned int
#define uchar unsigned char

sbit key1 = P0^1; //按键定义,当按键按下,则发送短信

char code num[] = "15871095395F";//要接收短信的号码,这里我写的是天俊的号码,号码后面记得要加F
char code sms[] = "5929751F82F14FCAFF0C795D4F60751F6D3B61095FEBFF01";//短信内容:"天生英俊,祝你生活愉快!"Unicode码

char code str1[] = "AT\n";        //发送AT,握手指令
char code str2[] = "AT+CMGF=0\n";        //定义发送的短信为PDU格式,即短信内容为中文
char code str3[] = "AT+CSCS=GSM\n";        // 使用GSM字符集
char code str4[] = "AT+CSMP=17,167,0,8\n";        //长度
char code str5[] = "AT+CMGS=";  
char code str6[] = "0891683108704705F011000D9168";        //短信信息中心号码设置
char code str7[] = "000800";

void Serial_Init(void);                //声明串口初始化函数
void Delay_ms(uint time);        //声明延时函数
void Send_PDU_Message(char num[], char sms[]);        //声明给指定号码发送PDU模式短信息函数
//=====主函数=====//
void main(void)
{
         Serial_Init();
         TI = 1;

         while(1)
         {
                 if (key1 == 0)
                {
                        Delay_ms(20);
                        if (key1 == 0)
                        {
                                Delay_ms(20);
                                Send_PDU_Message(num, sms);
                        }       
                }
         }
}
//=====串口初始化函数=====//
void Serial_Init(void)
{
        SCON = 0X50;  //串口:方式1,允许发送和接收
        TMOD = 0x20;  //定时器1:模式2,8位自动重装模式,用于产生波特率
        TH1 = 0XFD;          //11.0592MHZ晶振,设置波特率为9600
        TL1 = 0XFD;
        TR1 = 1;  //开启定时器1
}
//=====延时函数=====//
void Delay_ms(unsigned int time)
{
        unsigned int i;

        for (; time>0; time--)
                {
                          i=1500;
                          while(i--);
                }
}
//=====串口中断=====//
/*void Serial_Int() interrupt 4
{
        ES = 0;
        if(TI)
                {
                        TI = 0;
                }
        if(RI)
                {
                        RI = 0;
                }
} */
//=====中文短信内容发送函数=====//
//=函数功能:给指定号码发送中文短信。num[]=接收端号码;Sms[]=发送中文内容的Unicode编码
//=
//=
//==============================//
void Send_PDU_Message(char num[], char sms[])
{
        uchar i;

        printf("%s", str1);        //发送握手指令
        Delay_ms(200);
        printf("%s", str2);        //设置为PDU模式,适合发送短信内容为中文
        Delay_ms(200);
        printf("%s", str3);        //使用GSM字符集
        Delay_ms(200);
        printf("%s", str4);        //设置PDU模式参数,8为使用Unicode编码
        Delay_ms(200);
        printf("%s", str5);
        printf("%d\n", strlen(sms)/2+15);        //字节长度,与实际短信内容长度有关
        Delay_ms(200);
        printf("%s", str6);        //一开始发送的字符,包括短信中心号码等,这部分一般都是固定不变的,可以不用管它
        for (i=0; i<6; i++)        //然后接收短信的电话号码再两位两位分别调换位置
         {
                   printf("%c%c", num[2*i+1], num[2*i]);
         }
        printf("%s", str7);        //固定字符
        printf("%02x", strlen(sms)/2);        //中文短信内容字数
        printf("%s\x1a", sms);        //发送内容的Unicode编码字符串+(CTRL+Z)
        Delay_ms(200);
}

出0入0汤圆

发表于 2010-10-8 11:01:40 | 显示全部楼层
没试过变化内容,温度放最后,把最后的数据建表格可能是个办法.

出0入0汤圆

发表于 2010-11-10 12:03:38 | 显示全部楼层
调试TC35发送中文短信,但是总是接受不到!
请教各位高人指点下啊!
信息中心号码:13010712500
接受信息号码:15072718697
发送内容:你好,Hello!
指令如下:
AT<回车>
AT+CMGF=0<回车>
AT+CMGS=32<回车>
0891683110702105F011000B815170728196F70008A7124F60597DFF0C00480065006C006C006F0021<回车>
1A<回车>  (十六进制发送的)
后面有OK返回,但是就是接收不到短信!
串口调试如下图:



(原文件名:QQ截图未命名.jpg)

出0入0汤圆

发表于 2010-11-10 13:14:15 | 显示全部楼层
mark!

出0入0汤圆

 楼主| 发表于 2010-12-4 17:30:13 | 显示全部楼层
回复【楼主位】swx9588
-----------------------------------------------------------------------
问题已解决,谢谢。就是存到数组那里就可以了

出0入0汤圆

发表于 2010-12-5 15:37:40 | 显示全部楼层
回复【楼主位】swx9588
最近在弄gsm模块,型号是西门子的tc35i,我能实现中文短信和英文短信的收发,这些短信都是内容固定的,打电话接电话,但不知道怎么把测得的温度值发送出去,因为温度是变的,所以不知怎么去把这可变的温度以短信内容发送出去,请各位高手指教,帮指点下,感激不尽。本论坛我也查了相关gsm的主题,但没有说到怎么把可变的温度值发送出去,各位大虾救命啊!!!
-----------------------------------------------------------------------

我最近也在弄TC35i,我也遇到同样的问题,可变的温度发送不出去,我已经把它发到一个数组里了。


    for(i=0;i<18;i++)
      {
         AT_SendWendu=tempreture;   //    the tempreture is
      }
         for(i=18;i<25;i++)
     {
         AT_SendWendu=wendu[i-18];     //wendu[7]数组,print1602ss(0,5,wendu,7);温度显示        
           sendstring(AT_SendWendu);

出0入0汤圆

发表于 2011-5-20 12:10:31 | 显示全部楼层
MARK!

出0入0汤圆

发表于 2011-5-20 12:45:42 | 显示全部楼层
普通手机的y有留出串口的,用串口线连上用这个程序可以使用么???啥都不懂GSM的搭车问一下。

出0入0汤圆

发表于 2011-7-19 16:50:38 | 显示全部楼层
回复【8楼】zfdpj
-----------------------------------------------------------------------

1A不要单独发,把1A直接连到短消息字符窜后面发送,这破串口调试助手也不知是谁发开发的,害人不浅,我原来也被这问题搞过,鄙视!!

出0入0汤圆

发表于 2011-8-16 11:41:15 | 显示全部楼层
以前做过GSM的项目,和楼主用的一样都是TC35I,不过我不是搞软件的。

出0入0汤圆

发表于 2011-11-7 23:26:31 | 显示全部楼层
同问

出0入0汤圆

发表于 2012-12-24 13:02:24 | 显示全部楼层
我也在弄着设计。楼主能否把你的设计发给我906314948@qq.com
我还有很多不懂得地方,希望学习学习

出0入0汤圆

发表于 2013-4-14 00:16:10 | 显示全部楼层
zfdpj 发表于 2010-11-10 12:03
调试TC35发送中文短信,但是总是接受不到!
请教各位高人指点下啊!
信息中心号码:13010712500

先发送短信中心号码

出0入0汤圆

发表于 2013-4-14 16:40:02 | 显示全部楼层
mark 学习一下

出0入0汤圆

发表于 2013-4-14 22:08:10 | 显示全部楼层
看看GSM 关于PDU或txt编码的规则就可以。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-18 11:03

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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