Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 474|回复: 4

[未解决] ESP32蓝牙与UE4通信,求大佬帮忙看下乱码问题

[复制链接]
发表于 2022-8-9 14:41 | 显示全部楼层 |阅读模式
BluetoothSerial SerialBT;



void setup()

{

    Serial.begin(115200);

    SerialBT.begin("esp32");

    // SerialBT.setPin("1234");

    Serial.printf("BT initial ok and ready to pair. \r\n");

}



void loop()

{

    if (Serial.available())

    {

        SerialBT.write(Serial.read());



    }

    if (SerialBT.available())

    {

        Serial.write(SerialBT.read());

        Serial.println();

    }

//    delay(5);

}

本意是ESP32开启蓝牙,手机链接后给ESP32发信息,UE5网上找了个读取串口信息的C++代码,根据读取的不同信息做不同的反应。

现在问题来了:手机蓝牙调试器给esp32发信息(115200),串口读取信息,用串口调试器看的是正常的,但是ue4读的就是乱码了。
备注:用其他的9600比特时候ue4能正常显示。

发表于 2022-8-9 14:54 | 显示全部楼层
这不就是你读取串口的波特率没设置对。。。。
 楼主| 发表于 2022-8-9 15:13 | 显示全部楼层
XlinliY.Zhang 发表于 2022-8-9 14:54
这不就是你读取串口的波特率没设置对。。。。

在ue4中设置了15200了,不对的话在ue4里边创建不了串口对象,直接读不到,而不是读的是乱码,我感觉是串口读取的蓝图的问题那
 楼主| 发表于 2022-8-9 15:14 | 显示全部楼层
这是ue4里Read String用了读取的C++,是不是这里得设置什么?

FString ASerial::ReadString(bool& bSuccess)
{
        return ReadStringUntil(bSuccess, '\0');
}

FString ASerial::Readln(bool& bSuccess)
{
        return ReadStringUntil(bSuccess, '\n');
}

FString ASerial::ReadStringUntil(bool& bSuccess, uint8 Terminator)
{
        bSuccess = false;
        if (!m_hIDComDev) return TEXT("");

        TArray<uint8> Chars;
        uint8 Byte = 0x0;
        bool bReadStatus;
        unsigned long dwBytesRead, dwErrorFlags;
        COMSTAT ComStat;

        ClearCommError(m_hIDComDev, &dwErrorFlags, &ComStat);
        if (!ComStat.cbInQue) return TEXT("");

        do {
                bReadStatus = BOOL2bool(ReadFile(
                        m_hIDComDev,
                        &Byte,
                        1,
                        &dwBytesRead,
                        m_OverlappedRead));

                if (!bReadStatus)
                {
                        if (GetLastError() == ERROR_IO_PENDING)
                        {
                                WaitForSingleObject(m_OverlappedRead->hEvent, 2000);
                        }
                        else
                        {
                                Chars.Add(0x0);
                                break;
                        }
                }

                if (Byte == Terminator || dwBytesRead == 0)
                {
                        // when Terminator is \n, we know we're expecting lines from Arduino. But those
                        // are ended in \r\n. That means that if we found the line Terminator (\n), our previous
                        // character could be \r. If it is, we remove that from the array.
                        if (Chars.Num() > 0 && Terminator == '\n' && Chars.Top() == '\r') Chars.Pop(false);

                        Chars.Add(0x0);
                        break;
                }
                else Chars.Add(Byte);

        } while (Byte != 0x0 && Byte != Terminator);

        bSuccess = true;
        auto Convert = FUTF8ToTCHAR((ANSICHAR*)Chars.GetData());
        return FString(Convert.Get());
}
 楼主| 发表于 2022-8-9 15:22 | 显示全部楼层
XlinliY.Zhang 发表于 2022-8-9 14:54
这不就是你读取串口的波特率没设置对。。。。

大佬感谢,通过你的回复,吧蓝图改成9600可以了,我还以为蓝牙只能用15200
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|Arduino中文社区

GMT+8, 2022-10-7 20:40 , Processed in 0.023678 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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