首页 > 解决方案 > Adafruit Fona 与 echo 服务器建立连接,但不发送任何数据

问题描述

使用带有 Adafruit Fona 3g 的 mbed OS 和 stm32 核板,我试图通过 3g 连接将数据发送到服务器。我正在使用此处发布的 .cpp 文件和 .h 文件:https ://os.mbed.com/users/Nels885/code/Adafruit_FONA_3G/file/b18cfba4283a/

代码似乎卡在 getTCPtimeout 上。我很难弄清楚为什么会这样。

我尝试注释掉 getTCPtimeout 函数以查看结果,并且代码完全运行,但从未与服务器建立连接。

#include "mbed.h"
#include "Adafruit_FONA.h"

#define FONA_RST D4
#define FONA_TX D1
#define FONA_RX D0
#define FONA_RI D7 //not used

char replybuffer[255];


Adafruit_FONA_3G fona(FONA_TX, FONA_RX, FONA_RST, FONA_RI);
Serial pc(USBTX, USBRX);

int main() 
{

    fona.TCPinitialize();
    pc.printf ("initialize \n");
    char *Timeout = "10000000";
    fona.getTCPtimeout(Timeout);
    pc.printf ("timeout \n");
    char * Server = "47.218.188.133";
    uint16_t Port = 23;
    fona.TCPconnect(Server,Port);
    pc.printf ("connect \n");
    char * Packet = "Pick Up %";
    fona.TCPsend(Packet);
    pc.printf ("send \n");
    fona.TCPclose();
    pc.printf ("close \n");
    }

编辑:我正在运行代码并注意到在修复上述问题后,代码会卡住 TCPSend 函数,特别是在 packet[0] = 0; 之前。如下所示:

bool Adafruit_FONA_3G::TCPsend(char *packet)
{
    if (strlen(packet) > 0) {
        mySerial.printf("%s", packet);
        //mySerial.printf("%s\r\n", packet);

        readline();

        packet[0] = 0;

        return true;
    } else return false;
}

注释掉该行时,代码将一直运行。我仍在测试代码是否仍按预期运行,但我的问题是 packet[0] = 0; 的目的到底是什么?

标签: c++stm32gsmmbedadafruit

解决方案


Adafruit_FONA_3G::getTCPtimeout()假设您传递给它一个大小 > 20 的可写缓冲区。您传递的是一个较小大小的只读缓冲区。所以,更换

char *Timeout = "10000000";

char Timeout[21];

推荐阅读