Tip / ログイン to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
lock attach
Attachments are accessible only for community members.
Translation_Bot
Community Manager
Community Manager
Community Manager

Xin chào cộng đồng, tôi có một dự án đọc cảm biến BME280 + ML8511 trên PSoC 6 BLE Gửi dữ liệu được đọc bởi cảm biến qua BLE
ヒエン・ト・トレン・ミット・アプリ・ニャット・ファット・ミン
Nhưng tôi đang gặp một vấn đề: trên ứng dụng MIT, khi nhận dữ liệu float đồng
thời, tôi không thể phân biệt giữa tia cực tím, nhiệt độ,...
Tôi đã tìm thấy một giải pháp có thể chèn dấu ";" vào chuỗi dữ liệu đã gửi và sẽ được tách ra trên ứng dụng MIT!
PSoC 6 BLE không thể gửi chuỗi dữ liệu đó!
Tôi không biết những gì tôi đang làm có đúng không? Và lỗi xảy ra ở đâu?
Hy vọng mọi người có thể xem qua dự án và giúp tôi sửa lỗi!
カムオン

0 件の賞賛
1 解決策
Translation_Bot
Community Manager
Community Manager
Community Manager

こんにちは@KhoaNguyen

後でコードを確認しますが、代わりに簡単な変更を行う代わりに CAN 。
カスタム文字のデータ型をuint8_t[](配列)に設定してから、長さを設定する必要があります。

あなたのコードから(ble_handler.c内 )、データ文字列を作成し、それをカスタム文字値に接続CAN

if( NotificationEnabled.data == 1 && ble_param.data.handler == (uint8_t)WRITE_NOTIF )
    {
        char str_uv[10], str_P[10], str_T[10], str_H[10];
        char txt_buf[44]; 
        sprintf(txt_buf,"%s;%s;%s;%s",ftoa(ble_param.temp.value,str_T,2)
                                                     ,ftoa(ble_param.pres.value,str_P,2)
                                                     ,ftoa(ble_param.humi.value,str_H,2)
                                                     ,ftoa(ble_param.ml8511.value,str_uv,2));
        
        UART_PutString("data ble :");
        UART_PutString(txt_buf);
        notificationPacket.connHandle = cy_ble_connHandle[0];
        notificationPacket.handleValPair.attrHandle = CY_BLE_SENSOR_CHUOIDATA_CHAR_HANDLE;
        notificationPacket.handleValPair.value.val = (uint8_t*)txt_buf;
        notificationPacket.handleValPair.value.len = strlen(txt_buf);
        ble_param.data.handler = (uint8_t)DO_NOTHING;
        Cy_BLE_GATTS_Notification(&notificationPacket);  
    };


私はあなたの前のものを使ってみました、そしてこれは私の結果です

 

ADSW_1-1695978817673.png


よろしくお願いします、
ティッカー

 

元の投稿で解決策を見る

0 件の賞賛
5 返答(返信)
Translation_Bot
Community Manager
Community Manager
Community Manager

どうぞ手を貸して下さい!
ありがとうございました!

0 件の賞賛
Translation_Bot
Community Manager
Community Manager
Community Manager

こんにちは@KhoaNguyen

データ型として uint8_t の配列を使用し、文字列の最大長 (24 など) を設定する CAN 。

ADSW_0-1695911690804.png

次に CAN 文字列の strlen を使用して、文字列をデータフィールドとデータの長さにコピーできます。

したがって、文字列の新しいデータ構造体を作成し、sensor_param構造体を更新する必要があります。

...
typedef struct{
    uint8_t *data;
    uint8_t len;
}content_str;

typedef struct{
    content_t ml8511;
    content_t temp;
    content_t humi;
    content_t pres;
    content_t data;
    content_str data_str;
}sensor_param;

...

CAN文字列を ble_param.data_str.data にコピー変数と文字列の長さを ble_param.data_str.len に格納します。変数。
次に、ble_param.data_str.dataの変数をGATTのvalue.val(カスタム文字)にコピーして通知を更新します。

 notificationPacket.handleValPair.attrHandle = CY_BLE_SENSOR_CHUOIDATA_CHAR_HANDLE;
        notificationPacket.handleValPair.value.val = ble_param.data_str.data;
        notificationPacket.handleValPair.value.len = ble_param.data_str.len > 24 ? 24 : ble_param.data_str.len;


よろしくお願いします、
ティッカー

0 件の賞賛
Translation_Bot
Community Manager
Community Manager
Community Manager

ご協力ありがとうございました!
しかし、私はまだ理解していません "それからあなたはあなたの文字列の strlen CANを使ってデータフィールドとデータの長さに文字列をコピーする". もっと明確に説明して CAN 例を挙げていただければ幸いです
ありがとうございました!

0 件の賞賛
Translation_Bot
Community Manager
Community Manager
Community Manager

こんにちは!
プロジェクトを編集した後、データが送信されました!
しかし、私はまだ送信されているデータ文字列が私が望むものではないという問題があります
たとえば、データ = "31.21;1012.80;77.00;18.64". 送信されるデータは「31.2」です
どこで問題が発生したのかわかりませんか? 私がそれを修正するのを手伝ってください
ありがとうございました!

0 件の賞賛
Translation_Bot
Community Manager
Community Manager
Community Manager

こんにちは@KhoaNguyen

後でコードを確認しますが、代わりに簡単な変更を行う代わりに CAN 。
カスタム文字のデータ型をuint8_t[](配列)に設定してから、長さを設定する必要があります。

あなたのコードから(ble_handler.c内 )、データ文字列を作成し、それをカスタム文字値に接続CAN

if( NotificationEnabled.data == 1 && ble_param.data.handler == (uint8_t)WRITE_NOTIF )
    {
        char str_uv[10], str_P[10], str_T[10], str_H[10];
        char txt_buf[44]; 
        sprintf(txt_buf,"%s;%s;%s;%s",ftoa(ble_param.temp.value,str_T,2)
                                                     ,ftoa(ble_param.pres.value,str_P,2)
                                                     ,ftoa(ble_param.humi.value,str_H,2)
                                                     ,ftoa(ble_param.ml8511.value,str_uv,2));
        
        UART_PutString("data ble :");
        UART_PutString(txt_buf);
        notificationPacket.connHandle = cy_ble_connHandle[0];
        notificationPacket.handleValPair.attrHandle = CY_BLE_SENSOR_CHUOIDATA_CHAR_HANDLE;
        notificationPacket.handleValPair.value.val = (uint8_t*)txt_buf;
        notificationPacket.handleValPair.value.len = strlen(txt_buf);
        ble_param.data.handler = (uint8_t)DO_NOTHING;
        Cy_BLE_GATTS_Notification(&notificationPacket);  
    };


私はあなたの前のものを使ってみました、そしてこれは私の結果です

 

ADSW_1-1695978817673.png


よろしくお願いします、
ティッカー

 

0 件の賞賛