OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5301|回复: 13

STM32和SIM800C做短信群发问题求助

[复制链接]

1

主题

6

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2018-4-24
在线时间
3 小时
发表于 2018-4-24 17:26:04 | 显示全部楼层 |阅读模式
10金钱
自己的想法是试着先发两个手机号,先LED屏幕输入内容和两个手机号,然后先给一个手机号发送内容,再给另一个手机号发送,代码如下,但是运行时发现两段代码分开都能发送,合在一起就只能发送给手机号1,手机号2发送不了,有大佬能给看一下问题出在哪里吗?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2018-4-24
在线时间
3 小时
 楼主| 发表于 2018-4-24 17:41:45 | 显示全部楼层
uint8_t sendMessage(void)
{
        uint8_t send_number_1[16] = {0};//
        uint8_t send_number_2[16] = {0};
        uint8_t index, i,j;
        uint8_t endInputFlag = 0;
        uint8_t message[128] = {0};//
        uint8_t reply[128] = {0};
        uint8_t ATCommand[128]= "at+cmgs=\"+86";
        uint8_t ATCommand2[128]= "at+cmgs=\"+86";
        uint32_t WaitTick;
        UserAckKeyValueType keyval;

        SendMessage_menu();
       
       
        //µÚÒ»¸öÊÖ»úºÅÂë
        index = 0;
         while((index < 16)&&(endInputFlag==0))
         {
                keyval = keyValueToUserAck();                                                       
                if(keyval != NOKEY)
                {                       
                        Delay_nms(100);
                        if(keyval < 10)
                        {
                                send_number_1[index++] = (uint8_t)keyval + 0x30;          //dec2ascii       
                                showMessageData_menu(send_number_1,send_number_2,message);                               
                        }
                        else if(keyval == KEY_OK)
                        {
                                endInputFlag = 1;
                        }
                        else if(keyval == CANCEL)
                        {
                                for(i = 0;i<index;i++)
                                {
                                        send_number_1[i] = 0;                                               
                                }
                                SendMessage_menu();
                                index = 0;       
                        }
                        else if(keyval == LEFT)
                        {
                                if(index > 0)       
                                {
                                        send_number_1[index-1] = 0;
                                        index--;       
                                        SendMessage_menu();                                       
                                        showMessageData_menu(send_number_1,send_number_2,message);                                       
                                }
                        }
                        else
                        {
                                //nothing
                        }
                }               
        }
        if(index>11)
        {
                return 1;
        }
        //&#181;&#218;&#182;&#254;&#184;&#246;&#202;&#214;&#187;ú&#186;&#197;&#194;&#235;
                index = 0;
          endInputFlag=0;
         while((index < 16)&&(endInputFlag==0))
         {
                keyval = keyValueToUserAck();                                                       
                if(keyval != NOKEY)
                {                       
                        Delay_nms(100);
                        if(keyval < 10)
                        {
                                send_number_2[index++] = (uint8_t)keyval + 0x30;          //dec2ascii        &#182;&#193;&#200;&#161;&#202;&#214;&#187;ú&#186;&#197;
                                showMessageData_menu(send_number_1,send_number_2,message);                               
                        }
                        else if(keyval == KEY_OK)
                        {
                                endInputFlag = 1;
                        }
                        else if(keyval == CANCEL)
                        {
                                for(i = 0;i<index;i++)
                                {
                                        send_number_2[i] = 0;                                               
                                }
                                SendMessage_menu();
                                index = 0;       
                        }
                        else if(keyval == LEFT)
                        {
                                if(index > 0)       
                                {
                                        send_number_2[index-1] = 0;
                                        index--;       
                                        SendMessage_menu();                                       
                                        showMessageData_menu(send_number_1,send_number_2,message);                                       
                                }
                        }
                        else
                        {
                                //nothing
                        }
                }               
        }
        if(index>12)
        {
                return 1;
        }
       
       
       
        //&#202;&#228;&#200;&#235;&#196;&#218;&#200;&#221;
        index = 0;endInputFlag = 0;
        while((index < 128)&&(endInputFlag==0))
        {
                keyval = keyValueToUserAck();                                                       
                if(keyval != NOKEY)
                {                       
                        Delay_nms(100);
                        if(keyval < 10)
                        {
                                message[index++] = (uint8_t)keyval + 0x30;          //dec2ascii       
                                showMessageData_menu(send_number_1,send_number_2,message);                               
                        }
                        else if(keyval == KEY_OK)
                        {
                                endInputFlag = 1;
                        }
                        else if(keyval == CANCEL)
                        {
                                for(i = 0;i<index;i++)
                                {
                                        message[i] = 0;                                               
                                }
                                index = 0;       
                        }
                        else if(keyval == LEFT)
                        {
                                if(index > 0)       
                                {
                                        message[index-1] = 0;
                                        index--;
                                        SendMessage_menu();
                                        showMessageData_menu(send_number_1,send_number_2,message);                                                       
                                }
                        }
                        else
                        {
                                //nothing to do
                        }
                }               
        }

        if(index>126)
        {
                return 1;
        }
       
       
        ///////////
        strcat((char*)message,"\x1a");
        if(endInputFlag == 1)
        {
                //·&#162;&#203;&#205;&#181;&#218;&#210;&#187;&#204;&#245;&#182;&#204;&#208;&#197;
                strcat((char*)ATCommand,(char*)send_number_1);
                strcat((char*)ATCommand,"\"\r");               
                uartSendFrame2Phone((char*)ATCommand, strlen((char*)ATCommand));
                WaitTick = local_ticktime();
                while( !timeout( WaitTick, 3000 ) )
                {
                        if(message_Send_Response==1)
                        {               
                                getDataFromPhoneData(reply);
                                if(strstr((char*)reply, ">"))
                                {
                                        uartSendFrame2Phone((char*)message, strlen((char*)message));
                                        break;
                                }
                        }
                        if(error_reply == 1)
                        {
                                error_menu();
                                break;
                        }
                }       
                //·&#162;&#203;&#205;&#181;&#218;&#182;&#254;&#204;&#245;&#182;&#204;&#208;&#197;
    //Delay_nms(200);               
                strcat((char*)ATCommand2,(char*)send_number_2);
                strcat((char*)ATCommand2,"\"\r");               
                uartSendFrame2Phone((char*)ATCommand2, strlen((char*)ATCommand2));
                WaitTick = local_ticktime();
                while( !timeout( WaitTick, 3000 ) )
                {
                        if(message_Send_Response==0)
                        {                 
                                getDataFromPhoneData(reply);
                                if(strstr((char*)reply, ">"))
                                {
                                        uartSendFrame2Phone((char*)message, strlen((char*)message));
                                        break;
                                }
                        }
                        if(error_reply == 1)
                        {
                                error_menu();
                                break;
                        }
                }       
                WaitTick = local_ticktime();
                while( !timeout( WaitTick, 2000 ) )
                {               
                        if(AT_Is_Ok == 1)
                        {               
                                break;
                        }
                }
                if(AT_Is_Ok == 1)
                {
                        showMessageSuccess_menu();
                }
                else
                {
                        showMessageError_menu();
                }
        }       
        return 0;
}
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2018-4-24
在线时间
3 小时
 楼主| 发表于 2018-4-24 17:42:57 | 显示全部楼层
uint8_t sendMessage(void)
{
        uint8_t send_number_1[16] = {0};//
        uint8_t send_number_2[16] = {0};
        uint8_t index, i,j;
        uint8_t endInputFlag = 0;
        uint8_t message[128] = {0};//
        uint8_t reply[128] = {0};
        uint8_t ATCommand[128]= "at+cmgs=\"+86";
        uint8_t ATCommand2[128]= "at+cmgs=\"+86";
        uint32_t WaitTick;
        UserAckKeyValueType keyval;

        SendMessage_menu();
       
       
        //第一个手机号
        index = 0;
         while((index < 16)&&(endInputFlag==0))
         {
                keyval = keyValueToUserAck();                                                       
                if(keyval != NOKEY)
                {                       
                        Delay_nms(100);
                        if(keyval < 10)
                        {
                                send_number_1[index++] = (uint8_t)keyval + 0x30;          //dec2ascii       
                                showMessageData_menu(send_number_1,send_number_2,message);                               
                        }
                        else if(keyval == KEY_OK)
                        {
                                endInputFlag = 1;
                        }
                        else if(keyval == CANCEL)
                        {
                                for(i = 0;i<index;i++)
                                {
                                        send_number_1[i] = 0;                                               
                                }
                                SendMessage_menu();
                                index = 0;       
                        }
                        else if(keyval == LEFT)
                        {
                                if(index > 0)       
                                {
                                        send_number_1[index-1] = 0;
                                        index--;       
                                        SendMessage_menu();                                       
                                        showMessageData_menu(send_number_1,send_number_2,message);                                       
                                }
                        }
                        else
                        {
                                //nothing
                        }
                }               
        }
        if(index>11)
        {
                return 1;
        }
        //第二个手机号
                index = 0;
          endInputFlag=0;
         while((index < 16)&&(endInputFlag==0))
         {
                keyval = keyValueToUserAck();                                                       
                if(keyval != NOKEY)
                {                       
                        Delay_nms(100);
                        if(keyval < 10)
                        {
                                send_number_2[index++] = (uint8_t)keyval + 0x30;          //dec2ascii        &#182;&#193;&#200;&#161;&#202;&#214;&#187;ú&#186;&#197;
                                showMessageData_menu(send_number_1,send_number_2,message);                               
                        }
                        else if(keyval == KEY_OK)
                        {
                                endInputFlag = 1;
                        }
                        else if(keyval == CANCEL)
                        {
                                for(i = 0;i<index;i++)
                                {
                                        send_number_2[i] = 0;                                               
                                }
                                SendMessage_menu();
                                index = 0;       
                        }
                        else if(keyval == LEFT)
                        {
                                if(index > 0)       
                                {
                                        send_number_2[index-1] = 0;
                                        index--;       
                                        SendMessage_menu();                                       
                                        showMessageData_menu(send_number_1,send_number_2,message);                                       
                                }
                        }
                        else
                        {
                                //nothing
                        }
                }               
        }
        if(index>12)
        {
                return 1;
        }
       
       
       
        //内容
        index = 0;endInputFlag = 0;
        while((index < 128)&&(endInputFlag==0))
        {
                keyval = keyValueToUserAck();                                                       
                if(keyval != NOKEY)
                {                       
                        Delay_nms(100);
                        if(keyval < 10)
                        {
                                message[index++] = (uint8_t)keyval + 0x30;          //dec2ascii       
                                showMessageData_menu(send_number_1,send_number_2,message);                               
                        }
                        else if(keyval == KEY_OK)
                        {
                                endInputFlag = 1;
                        }
                        else if(keyval == CANCEL)
                        {
                                for(i = 0;i<index;i++)
                                {
                                        message[i] = 0;                                               
                                }
                                index = 0;       
                        }
                        else if(keyval == LEFT)
                        {
                                if(index > 0)       
                                {
                                        message[index-1] = 0;
                                        index--;
                                        SendMessage_menu();
                                        showMessageData_menu(send_number_1,send_number_2,message);                                                       
                                }
                        }
                        else
                        {
                                //nothing to do
                        }
                }               
        }

        if(index>126)
        {
                return 1;
        }
       
       
        ///////////
        strcat((char*)message,"\x1a");
        if(endInputFlag == 1)
        {
                //发送第一条短信
                strcat((char*)ATCommand,(char*)send_number_1);
                strcat((char*)ATCommand,"\"\r");               
                uartSendFrame2Phone((char*)ATCommand, strlen((char*)ATCommand));
                WaitTick = local_ticktime();
                while( !timeout( WaitTick, 3000 ) )
                {
                        if(message_Send_Response==1)
                        {               
                                getDataFromPhoneData(reply);
                                if(strstr((char*)reply, ">"))
                                {
                                        uartSendFrame2Phone((char*)message, strlen((char*)message));
                                        break;
                                }
                        }
                        if(error_reply == 1)
                        {
                                error_menu();
                                break;
                        }
                }       
                //发送第二条短信
    //Delay_nms(200);               
                strcat((char*)ATCommand2,(char*)send_number_2);
                strcat((char*)ATCommand2,"\"\r");               
                uartSendFrame2Phone((char*)ATCommand2, strlen((char*)ATCommand2));
                WaitTick = local_ticktime();
                while( !timeout( WaitTick, 3000 ) )
                {
                        if(message_Send_Response==0)
                        {                 
                                getDataFromPhoneData(reply);
                                if(strstr((char*)reply, ">"))
                                {
                                        uartSendFrame2Phone((char*)message, strlen((char*)message));
                                        break;
                                }
                        }
                        if(error_reply == 1)
                        {
                                error_menu();
                                break;
                        }
                }       
                WaitTick = local_ticktime();
                while( !timeout( WaitTick, 2000 ) )
                {               
                        if(AT_Is_Ok == 1)
                        {               
                                break;
                        }
                }
                if(AT_Is_Ok == 1)
                {
                        showMessageSuccess_menu();
                }
                else
                {
                        showMessageError_menu();
                }
        }       
        return 0;
}
回复

使用道具 举报

558

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
164867
金钱
164867
注册时间
2010-12-1
在线时间
2099 小时
发表于 2018-4-25 01:45:43 | 显示全部楼层
帮顶
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2018-4-24
在线时间
3 小时
 楼主| 发表于 2018-4-25 21:30:11 | 显示全部楼层
有没有大佬帮忙看一下。。。。
回复

使用道具 举报

6

主题

148

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1254
金钱
1254
注册时间
2016-11-30
在线时间
211 小时
发表于 2018-4-26 09:42:56 | 显示全部楼层
首先表达一下,真的写程序一点备注都都没有,看起来有点难受。然后跟你说一下个人想法,如果要实现群发,那么应该是一条一条发,也就是等待上一条发送成功后,再进行下一条的发送,(这里想说的关键点是获取发送完成状态)。
回复

使用道具 举报

159

主题

964

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2081
金钱
2081
注册时间
2014-3-7
在线时间
488 小时
发表于 2018-4-26 09:48:08 | 显示全部楼层
可以用按键控制发送短信,如果按键可以的话,估计是时间间隔的问题?顺便问问群主 你发短信是怎么发出去的,是如何编码的?
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2018-4-24
在线时间
3 小时
 楼主| 发表于 2018-5-2 14:31:19 | 显示全部楼层
MrXiong 发表于 2018-4-26 09:42
首先表达一下,真的写程序一点备注都都没有,看起来有点难受。然后跟你说一下个人想法,如果要实现群发,那 ...

我的想法也是一条一条发,但主要 就在于如何判断发送成功.....
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2018-4-24
在线时间
3 小时
 楼主| 发表于 2018-5-2 14:33:01 | 显示全部楼层
ssssssssssss 发表于 2018-4-26 09:48
可以用按键控制发送短信,如果按键可以的话,估计是时间间隔的问题?顺便问问群主 你发短信是怎么发出去的 ...

我做的是通过矩阵键盘输入号码和内容,然后控制发送,时间间隔这个问题我想过,但是我感觉我设置间隔长短都试过,没有用。发短信是通过发指令给串口然后给SIM800然后发送的
回复

使用道具 举报

159

主题

964

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2081
金钱
2081
注册时间
2014-3-7
在线时间
488 小时
发表于 2018-5-2 17:13:25 | 显示全部楼层
山神山鬼 发表于 2018-5-2 14:33
我做的是通过矩阵键盘输入号码和内容,然后控制发送,时间间隔这个问题我想过,但是我感觉我设置间隔长短 ...

你不需要编码吗?比如说你要发送短信,”a明,我今天吃过饭了”,你发送什么给串口呢》?
回复

使用道具 举报

6

主题

148

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1254
金钱
1254
注册时间
2016-11-30
在线时间
211 小时
发表于 2018-5-3 10:13:11 | 显示全部楼层
发送短信成功都会有返回值的,你只要在串口监测返回值就可以做到了(如下面的图),原子的例程里有sim800c_send_cmd()函数可以做到这点。再者有关编码部分的步骤你可以参考下面的链接(https://blog.csdn.net/ljfceo/article/details/70613291),这个链接的楼主做了很详细的解释,你可以参考一下。
QQ截图20180503100645.png
回复

使用道具 举报

159

主题

964

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2081
金钱
2081
注册时间
2014-3-7
在线时间
488 小时
发表于 2018-5-3 17:07:06 | 显示全部楼层
本帖最后由 ssssssssssss 于 2018-5-3 17:10 编辑
MrXiong 发表于 2018-5-3 10:13
发送短信成功都会有返回值的,你只要在串口监测返回值就可以做到了(如下面的图),原子的例程里有sim800c_ ...

汉字与Unicode互换小工具   这个软件能发给我吗?
回复

使用道具 举报

6

主题

148

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1254
金钱
1254
注册时间
2016-11-30
在线时间
211 小时
发表于 2018-5-4 09:33:02 | 显示全部楼层
ssssssssssss 发表于 2018-5-3 17:07
汉字与Unicode互换小工具   这个软件能发给我吗?

转码也可以在线转码,比如(http://tool.chinaz.com/Tools/Unicode.aspx)。

u-centersetup_v8.10.zip

10.84 MB, 下载次数: 45

回复

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2022-3-29
在线时间
7 小时
发表于 2022-10-7 10:55:26 | 显示全部楼层
for(m=0; m < phone_count; m++)
        {
                for (i = 0;i < 11;i++)
                {
                        b[i][0] = 0;
                        b[i][1] = 0;
                        b[i][2] = 3;
                        b[i][3] = (int)read_iphone[m][i];
                }
                u3_printf("AT+CMGF=1\n");//发送短信内容到GSM模块
                delay_ms(1000);
                u3_printf("AT+CSMP=17,167,2,25\n");
                delay_ms(1000);
                u3_printf("AT+CSCS=\"UCS2\"\n");
                delay_ms(1000);
                u3_printf("AT+CMGS=");//AT+CMGS="00310038003400350035003700310038003800340031"
                u3_printf("\"");
                for (i = 0;i < 11;i++)
                        for(j=0; j<4; j++)
                                u3_printf("%d", b[i][j]);
                u3_printf("\"");
                u3_printf("\n");
                delay_ms(1000);
                u3_printf("7740706B4E86");/*短信内容:着火了*/
                delay_ms(1000);
                USART_SendData(USART3,0X1A);
                memset(b ,0, sizeof(b));
                delay_ms(1000);
        }

phone_count 是号码个数,我输入的5个手机号,之前也是隔一个手机号发一个信息,我也加了延迟,最后发现每条AT指令之后都得加个1s左右的延迟
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-5-16 04:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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