哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

OpenHarmony項(xiàng)目實(shí)戰(zhàn):智能體重秤

王程 ? 來(lái)源:jf_75796907 ? 作者:jf_75796907 ? 2024-02-18 09:26 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、簡(jiǎn)介

本demo基于OpenHarmony3.1Beta版本開(kāi)發(fā),該樣例能夠接入數(shù)字管家應(yīng)用,通過(guò)數(shù)字管家應(yīng)用監(jiān)測(cè)體重秤上報(bào)數(shù)據(jù),獲得當(dāng)前測(cè)量到的體重,身高,并在應(yīng)用端形成一段時(shí)間內(nèi)記錄的體重值,以折線(xiàn)圖的形式表現(xiàn)出來(lái),根據(jù)計(jì)算的BMI值來(lái)提醒當(dāng)前身體健康狀態(tài),推送健康小知識(shí)。

1.交互流程

wKgaomXQnWmAdUYcAAEUlgJ5yiQ402.pngwKgZomXQnNqALcaQAAEUlgJ5yiQ297.png


交互圖

如上圖所示,智能體重稱(chēng)整體方案原理圖可以大致分成:智能體重稱(chēng)設(shè)備、數(shù)字管家應(yīng)用、云平臺(tái)三部分。智能體重稱(chēng)通過(guò)MQTT協(xié)議連接華為IOT物聯(lián)網(wǎng)平臺(tái),從而實(shí)現(xiàn)命令的接收和屬性上報(bào)。 關(guān)于智能設(shè)備接入華為云IoT平臺(tái)的詳細(xì)細(xì)節(jié)可以參考 連接IOT云平臺(tái)指南;智能設(shè)備同數(shù)字管家應(yīng)用之間的設(shè)備模型定義可以參考profile .

2.實(shí)物簡(jiǎn)介

wKgaomXQnWuAdrCRAADRGNjOFSk22.jpegwKgZomXQnOyAToaqAADRGNjOFSk708.png


如上圖示,左邊為全志xr806模組,右邊為超聲波測(cè)距模塊,echo腳連接PA19,Triq腳連接PA20,Vcc腳連接5V電源,Gnd腳接地,

wKgZomXQnWyAJr_BAADlLNMwdYU56.jpegwKgZomXQnQaAdR-PAADlLNMwdYU353.png


如上圖示,右邊為稱(chēng)重模塊,clk腳接PB15,dt腳接PB14,vcc腳接5V,gnd腳接地,稱(chēng)重傳感器紅色線(xiàn)接E+,黑色線(xiàn)接E-,白色線(xiàn)接A-,綠色線(xiàn)接A+

左邊xr806模塊左下角k1按鍵,長(zhǎng)按k1按鍵不放,同時(shí)上電,4-5秒后松開(kāi)按鍵,可以清除已保存得配網(wǎng)信息

xr806模塊,在設(shè)備正常工作后,按k1按鍵,可以初始化當(dāng)前得重量為0,高度為0

二、 快速上手

1.硬件準(zhǔn)備

全志xr806模組

hcsr04超聲波模塊

hx711稱(chēng)重模塊帶支架托盤(pán)

預(yù)裝HarmonyOS手機(jī)一臺(tái)

2、環(huán)境準(zhǔn)備

參照文檔: XR806快速上手指導(dǎo)文檔

3、編譯前準(zhǔn)備

設(shè)備側(cè)代碼下載
具體倉(cāng)庫(kù)地址:https://gitee.com/openharmony-sig/knowledge_demo_smart_home/

下載方式:使用git 命令下載,指令如下(用戶(hù)也可以根據(jù)需要將該倉(cāng)庫(kù)fork到自己的目錄下后進(jìn)行下載)

cd ~
git clone git@gitee.com:openharmony-sig/knowledge_demo_smart_home.git

代碼拷貝

cp -rfa  ~/knowledge_demo_smart_home/dev/team_x  ~/openharmony/vendor/
cp -rfa  ~/knowledge_demo_smart_home/dev/third_party/iot_link  ~/openharmony/third_party/

SOC代碼下載替換

當(dāng)前官方soc代碼由于DHCP暫未適配,所以暫時(shí)不支持AP模式,這時(shí)需要下載并替換之前SOC代碼。如果官方soc代碼已修復(fù)該問(wèn)題,可忽略此步驟。

git clone https://gitee.com/moldy-potato-chips/xr806_-ap_mode.git
mv ~/openharmony/device/soc/allwinner ~/allwinner.org			// 不建議直接刪除,
cp -raf xr806_-ap_mode ~/openharmony/device/soc/allwinner

整合并修改完成后的目錄結(jié)構(gòu)如下圖

wKgaomXQnWyAeVB1AAA9-Ujk-9c718.pngwKgaomXQnSCAf9JCAAA9-Ujk-9c264.png


修改文件

修改編譯依賴(lài)
打開(kāi) device/soc/allwinner/xradio/xr806/BUILD.gn,添加應(yīng)用依賴(lài)(deps字段):

module_group(module_name) {
  modules = [
      "src",
      "project",
      "include",
  ]
  configs = [
    ":SdkLdCconfig",
  ]
  deps = [ "http://vendor/team_x/smart_weight_scale/demo_smart_weight_scale:smart_weight_scale" ]
}

修改編譯方式
將demo依賴(lài)的庫(kù)編譯方式(static_library)修改為(source_set):
具體依賴(lài)查看demo_smart_weight_scale目錄下的BUILD.gn:

deps = [
       "../../common/iot_wifi_xradio:iot_wifi",
       "../../common/iot_cloud:iot_cloud",
       "http://third_party/cJSON:cjson",
       "../../common/iot_boardbutton_xradio:iot_boardbutton",
       "../../common/iot_boardled_xradio:iot_boardled_xradio",
    ]

其中//third_party/cJSON目錄下的BUILD.gn建議參照下面的修改:

source_set("cJSON") {
  sources = [
    "cJSON.c",
    "cJSON_Utils.c",
  ]
  ldflags = [ "-lm" ]
}

third_party/iot_link目錄下的各級(jí)使用到的BUILD.gn也需要將編譯方式修改為source_set,或者將所有需要編譯的文件放在iot_link目錄的BUILD.gn中,如下:

source_set("iot_link") {
    sources = [
        "link_log/link_log.c",
        "link_misc/link_random.c",
        "link_misc/link_ring_buffer.c",
        "link_misc/link_string.c",
        "network/dtls/dtls_al/dtls_al.c",
        "network/dtls/mbedtls/mbedtls_port/dtls_interface.c",
        "network/dtls/mbedtls/mbedtls_port/mbed_port.c",
        "network/dtls/mbedtls/mbedtls_port/timing_alt.c",
        "network/mqtt/mqtt_al/mqtt_al.c",
        "network/mqtt/paho_mqtt/port/paho_mqtt_port.c",
        "network/mqtt/paho_mqtt/port/paho_osdepends.c",
        "network/mqtt/paho_mqtt/paho/MQTTClient-C/src/MQTTClient.c",
        "network/mqtt/paho_mqtt/paho/MQTTPacket/src/MQTTConnectClient.c",
        "network/mqtt/paho_mqtt/paho/MQTTPacket/src/MQTTConnectServer.c",
        "network/mqtt/paho_mqtt/paho/MQTTPacket/src/MQTTDeserializePublish.c",
        "network/mqtt/paho_mqtt/paho/MQTTPacket/src/MQTTFormat.c",
        "network/mqtt/paho_mqtt/paho/MQTTPacket/src/MQTTPacket.c",
        "network/mqtt/paho_mqtt/paho/MQTTPacket/src/MQTTSerializePublish.c",
        "network/mqtt/paho_mqtt/paho/MQTTPacket/src/MQTTSubscribeClient.c",
        "network/mqtt/paho_mqtt/paho/MQTTPacket/src/MQTTSubscribeServer.c",
        "network/mqtt/paho_mqtt/paho/MQTTPacket/src/MQTTUnsubscribeClient.c",
        "network/mqtt/paho_mqtt/paho/MQTTPacket/src/MQTTUnsubscribeServer.c",
        "oc_mqtt/oc_mqtt_al/oc_mqtt_al.c",
        "oc_mqtt/oc_mqtt_profile_v5/oc_mqtt_profile.c",
        "oc_mqtt/oc_mqtt_profile_v5/oc_mqtt_profile_package.c",
        "oc_mqtt/oc_mqtt_profile_v5/oc_mqtt_event.c",
        "oc_mqtt/oc_mqtt_tiny_v5/oc_mqtt_tiny.c",
        "oc_mqtt/oc_mqtt_tiny_v5/hmac.c",
        "queue/queue.c",
    ]
    
    cflags = [ "-Wno-unused-variable" ]
    cflags += [ "-Wno-unused-but-set-variable" ]
    cflags += [  "-Wno-sign-compare" ]
    cflags += [  "-Wno-unused-parameter" ]
    cflags += [  "-Wno-unused-function" ]

    ldflags = [ "-Wl,-rpath-link=//device/xradio/xr806/xr_skylark/lib" ]
    ldflags += [ "-lmbedtls" ]

    include_dirs = [
        "inc",
        "link_log",
        "link_misc",
        "queue",
        "oc_mqtt/oc_mqtt_tiny_v5",
        "oc_mqtt/oc_mqtt_profile_v5",
        "oc_mqtt/oc_mqtt_al",
        "network/dtls/mbedtls/mbedtls_port",
        "network/mqtt/paho_mqtt/port",
        "network/mqtt/paho_mqtt/paho/MQTTClient-C/src",
        "network/mqtt/paho_mqtt/paho/MQTTPacket/src",
        "http://third_party/mbedtls/include/",
        "http://third_party/mbedtls/include/",
        "http://third_party/cJSON",
        "http://kernel/liteos_m/components/cmsis/2.0",
        "http://device/xradio/xr806/xr_skylark/include/net/mbedtls-2.2.0/",
    ]

    defines = [
        "MQTTCLIENT_PLATFORM_HEADER=paho_osdepends.h",
        "WITH_DTLS",
        "MBEDTLS_AES_ROM_TABLES",
        "MBEDTLS_CONFIG_FILE="los_mbedtls_config_dtls.h"",
        "CONFIG_DTLS_MBEDTLS_CERT",
        "CONFIG_DTLS_MBEDTLS_PSK",
        "CFG_MBEDTLS_MODE=PSK_CERT",
        "CONFIG_OC_MQTT_TINY_ENABLE=1"
    ]
}

修改iot_link中的部分文件
1.third_party/iot_link/network/mqtt/paho_mqtt/port/paho_mqtt_port.c

測(cè)試發(fā)現(xiàn),當(dāng)fd為0的時(shí)候,在執(zhí)行recv時(shí)會(huì)立馬返回-1,因此做下面規(guī)避操作。

static int __socket_connect(Network *n, const char *host, int port)
{
	...
	int tmpfd = socket(AF_INET,SOCK_STREAM,0); // to skip fd = 0;
	fd = socket(AF_INET,SOCK_STREAM,0);
	if(fd == -1) {
		return ret;
	}
	close(tmpfd);       // to skip fd = 0;
	...
}

系統(tǒng)setsockopt函數(shù)未適配,因此需要做下面的修改:

static int __socket_read(void *ctx, unsigned char *buf, int len, int timeout)
{
	int fd;
    int ret = 0;
#if 0
	struct timeval timedelay = {timeout / 1000, (timeout % 1000) * 1000};
    if(NULL== uf)
    {
        return ret;
    }
    
    fd = (int)(intptr_t)ctx;  ///< socket could be zero

    if (timedelay.tv_sec < 0 || (timedelay.tv_sec == 0 && timedelay.tv_usec <= 0))
    {
        timedelay.tv_sec = 0;
        timedelay.tv_usec = 100;
    }
    
    if(0 != setsockopt(fd,SOL_SOCKET,SO_RCVTIMEO,&timedelay,sizeof(struct timeval)))
    {
        return ret;  //could not support the rcv timeout
    }
    int bytes = 0;
    while (bytes < len) {
        int rc = recv(fd, &buf[bytes], (size_t)(len - bytes), 0);
        printf("[%s|%s|%d]fd = %d, rc = %dn", __FILE__,__func__,__LINE__, fd, rc);
        if (rc == -1) {
            if (errno != EAGAIN && errno != EWOULDBLOCK) {
                bytes = -1;
            }
            break;
        } else if (rc == 0) {
            bytes = 0;
            break;
        } else {
            bytes += rc;
        }
    }
    return bytes;
#else
	int bytes = 0;
    fd_set fdset;

    struct timeval timedelay = {timeout / 1000, (timeout % 1000) * 1000};
    if(NULL== buf)
    {
        return ret;
    }
    
    fd = (int)(intptr_t)ctx;  ///< socket could be zero

    if (timedelay.tv_sec < 0 || (timedelay.tv_sec == 0 && timedelay.tv_usec <= 0))
    {
        timedelay.tv_sec = 0;
        timedelay.tv_usec = 100;
    }
    timedelay.tv_sec = 2;
    FD_ZERO(&fdset);
    FD_SET(fd, &fdset);

    ret = select(fd + 1, &fdset, NULL, NULL, &timedelay);
    if (ret > 0) {
        while (bytes < len) {
            int rc = recv(fd, &buf[bytes], (size_t)(len - bytes), 0);
 //         printf("[%s|%s|%d]fd = %d, rc = %d, errno=%d(%s)n", __FILE__,__func__,__LINE__, fd, rc,errno, strerror(errno));
            if (rc == -1) {
                if (errno != EAGAIN && errno != EWOULDBLOCK) {
                    bytes = -1;
                }
                break;
            } else if (rc == 0) {
                bytes = 0;
                break;
            } else {
                bytes += rc;
            }
        }
    }

    return bytes;
#endif
}

2.third_party/iot_link/network/dtls/mbedtls/mbedtls_port/dtls_interface.c

在文件頂部添加打印函數(shù)定義以及添加mbedtls_calloc以及mbedtls_free的定義,否則編譯會(huì)提示錯(cuò)誤:

#define MBEDTLS_LOG LINK_LOG_DEBUG
#ifndef mbedtls_calloc
#define mbedtls_calloc  calloc
#endif
#ifndef mbedtls_free
#define mbedtls_free  free
#endif

系統(tǒng)部分mbedtls接口不一致,固需要注釋部分接口代碼:

mbedtls_ssl_context dtls_ssl_new(dtls_establish_info_s *info, char plat_type)
{
	...
	if (info->psk_or_cert == VERIFY_WITH_PSK)
    {
/*
        if ((ret = mbedtls_ssl_conf_psk(conf,
                                        info->v.p.psk,
                                        info->v.p.psk_len,
                                        info->v.p.psk_identity,
                                        strlen((const char *)info->v.p.psk_identity))) != 0)
        {
            MBEDTLS_LOG("mbedtls_ssl_conf_psk failed: -0x%x", -ret);
            goto exit_fail;
        }
*/
    }
    ...
}

int dtls_shakehand(mbedtls_ssl_context *ssl, const dtls_shakehand_info_s *info)
{
	...
	if (MBEDTLS_SSL_IS_CLIENT == info->client_or_server)
    {
        ret = mbedtls_net_connect(server_fd, info->u.c.host, info->u.c.port, info->udp_or_tcp);
        if( 0 != ret)
        {
            ret = MBEDTLS_ERR_NET_CONNECT_FAILED;
            goto exit_fail;
        }
    }
    else
    {
        //server_fd = (mbedtls_net_context*)atiny_net_bind(NULL, info->u.s.local_port, MBEDTLS_NET_PROTO_UDP);
        ///< --TODO ,not implement yet
    }
	...
}

void dtls_init(void)
{
    (void)mbedtls_platform_set_calloc_free(calloc, free);
    (void)mbedtls_platform_set_snprintf(snprintf);
//    (void)mbedtls_platform_set_printf(printf);
}

在iot_link/network/dtls/mbedtls/mbedtls_port/mbed_port.c文件中的dtls_imp_init()函數(shù)中,也需要注釋掉未實(shí)現(xiàn)的接口,否則編譯報(bào)錯(cuò):

int dtls_imp_init(void)
{
    int ret =-1;

    // (void)mbedtls_platform_set_calloc_free(calloc, free); 
    // (void)mbedtls_platform_set_snprintf(snprintf);
    // (void)mbedtls_platform_set_printf(printf);
    ret = dtls_al_install(&s_mbedtls_io);

    return ret;
}

3.在文件iot_link/network/mqtt/paho_mqtt/port/paho_osdepends.c中添加對(duì)應(yīng)timersub和timeradd的實(shí)現(xiàn)(系統(tǒng)中未實(shí)現(xiàn)該函數(shù)):

// add this for "timersub" && "timeradd"
#ifndef	timersub
#define timersub(s,t,a) (void) ( (a)->tv_sec = (s)->tv_sec - (t)->tv_sec, 
        ((a)->tv_usec = (s)->tv_usec - (t)->tv_usec) < 0 && 
        ((a)-?>tv_usec += 1000000, (a)->tv_sec--) )
#endif
#ifndef	timeradd
#define timeradd(s,t,a) (void) ( (a)->tv_sec = (s)->tv_sec + (t)->tv_sec, 
        ((a)->tv_usec = (s)->tv_usec + (t)->tv_usec) >= 1000000 && 
        ((a)->tv_usec -= 1000000, (a)->tv_sec++) )
#endif

4.編譯中會(huì)有部分頭文件提示找不到,這個(gè)時(shí)候直接將其注釋即可

(iot_link/network/mqtt/paho_mqtt/port/paho_osdepends.h):

#define INVALID_SOCKET SOCKET_ERROR
// #include 
#include 
#include 
// #include 
// #include 
// #include 
// #include 
#include 
#include 
#include 
#include 
#include 
#include 
#endif

#if defined(WIN32)
#include 
#else
// #include 
// #include 
#endif

5.因?yàn)槿跻脤?dǎo)致無(wú)法鏈接相關(guān)符號(hào),因此需要注釋以下幾個(gè)文件中的弱引用。

文件一 third_party/iot_link/network/dtls/dtls_al/dtls_al.c
#if 0
__attribute__((weak))  int dtls_imp_init(void)
{
    LINK_LOG_DEBUG("%s:###please implement dtls by yourself####",__FUNCTION__);
    return -1;
}
#endif
extern int dtls_imp_init(void);

文件二 third_party/iot_link/network/mqtt/mqtt_al/mqtt_al.c
#if 0
__attribute__((weak))  int mqtt_imp_init(void)
{
    LINK_LOG_DEBUG("%s:###please implement mqtt by yourself####",__FUNCTION__);
    return -1;
}
#endif
extern int mqtt_imp_init(void);

文件三 third_party/iot_link/oc_mqtt/oc_mqtt_al/oc_mqtt_al.c
#if 0
__attribute__ ((weak)) int oc_mqtt_imp_init(void)
{
    LINK_LOG_DEBUG("%s:###please implement oc mqtt by yourself####",__FUNCTION__);
    return 0;
}

__attribute__ ((weak)) int oc_mqtt_demo_main(void)
{
    LINK_LOG_WARN("Please implement the oc mqtt v5 demo yourself");
    return -1;
}
#endif
extern int oc_mqtt_demo_main(void);

修改GPIO查找方式

因?yàn)镚PIO框架修改了設(shè)備驅(qū)動(dòng)注冊(cè)的管腳號(hào),導(dǎo)致應(yīng)用無(wú)法根據(jù)HCS的引腳操作對(duì)應(yīng)的GPIO,此問(wèn)題已經(jīng)提issue,如果該問(wèn)題已解決,可以忽略此步驟。

打開(kāi)drivers/framework/support/platform/src/gpio/gpio_manager.c,將cntlr->start = start;注釋即可。

static int32_t GpioManagerAdd(struct PlatformManager *manager, struct PlatformDevice *device)
{
    uint16_t start;
    struct GpioCntlr *cntlr = CONTAINER_OF(device, struct GpioCntlr, device);

    if ((start = GpioCntlrQueryStart(cntlr, &manager->devices)) >= GPIO_NUM_MAX) {
        PLAT_LOGE("GpioCntlrAdd: query range for start:%d fail:%d", cntlr->start, start);
        return HDF_ERR_INVALID_PARAM;
    }

//    cntlr->start = start;
    DListInsertTail(&device->node, &manager->devices);
    PLAT_LOGI("%s: start:%u count:%u", __func__, cntlr->start, cntlr->count);
    return HDF_SUCCESS;
}

將對(duì)應(yīng)的驅(qū)動(dòng)文件復(fù)制到drvier對(duì)應(yīng)目錄:

因?yàn)橹鱾}(cāng)代碼中未將對(duì)應(yīng)的驅(qū)動(dòng)文件合并到driver/adpater/platform對(duì)應(yīng)的目錄下,固需要手動(dòng)將文件拷貝到對(duì)應(yīng)目錄。若主倉(cāng)已合入,可忽略此步驟。

// 拷貝gpio驅(qū)動(dòng)
cp -af device/soc/allwinner/xradio/drivers/gpio/gpio_xradio.* driver/adpater/platform/gpio

// 修改driver/adpater/platform/gpio/BUILD.gn文件,加上gpio_xradio的編譯

hdf_driver(module_name) {
  sources = []
  if (defined(LOSCFG_SOC_COMPANY_BESTECHNIC)) {
    sources += [ "gpio_bes.c" ]
  }

  if (defined(LOSCFG_SOC_COMPANY_ALLWINNER)) {
    sources += [ "gpio_xradio.c" ]
  }

  include_dirs = [ "." ]
}

為了節(jié)省ram資源,可以把無(wú)用的資源先關(guān)閉,如關(guān)閉內(nèi)部codec,將 device/soc/allwinner/xradio/xr806/project/prj_config.h中的PRJCONF_INTERNAL_SOUNDCARD_EN設(shè)置為0,如下:

/* Xradio internal codec sound card enable/disable */
#define PRJCONF_INTERNAL_SOUNDCARD_EN   0

4、代碼編譯

#首先可以查看一下hb的版本,如果hb版本為0.4.4版本就不需要更新。

查看hb版本

hb --version

更新hb, 以下指令需要在openharmony SDK根目錄執(zhí)行

pip3 uninstall ohos_build
pip3 install build/li

編譯命令:
hb set  // 如果是第一次編譯,Input code path 命令行中鍵入"./" 指定OpenHarmony工程編譯根目錄后 回車(chē),

如下圖所示,使用鍵盤(pán)上下鍵選中wifi_skylark

wKgZomXQnW2AfJ7CAAA9-Ujk-9c553.pngwKgZomXQnUuAP_yPAAAhKpafk90437.png

hb build // 如果需要全量編譯,可以添加-f 選項(xiàng)

生成的固件保存在out/xradio/smart_weight_scale目錄下

5、固件燒錄

參照文檔: XR806快速上手指導(dǎo)文檔

6、設(shè)備配網(wǎng)

在設(shè)備上電前需準(zhǔn)備好安裝了數(shù)字管家應(yīng)用的HarmonyOS手機(jī),詳情見(jiàn)數(shù)字管家應(yīng)用開(kāi)發(fā), 并在設(shè)置中開(kāi)啟手機(jī)的NFC功能;

寫(xiě)設(shè)備N(xiāo)FC標(biāo)簽,詳細(xì)操作見(jiàn)設(shè)備N(xiāo)FC標(biāo)簽指導(dǎo)文檔;

燒錄完成后,上電。開(kāi)發(fā)者在觀察開(kāi)發(fā)板上狀態(tài)LED燈以8Hz的頻率閃爍時(shí),將手機(jī)上半部靠近開(kāi)發(fā)板NFC標(biāo)簽處(無(wú)NFC標(biāo)簽的可用NFC貼紙?zhí)娲?;

碰一碰后手機(jī)將自動(dòng)拉起數(shù)字管家應(yīng)用并進(jìn)入配網(wǎng)狀態(tài);

配網(wǎng)過(guò)程中需要 連接設(shè)備的AP熱點(diǎn),然后填寫(xiě)需要配置的wifi的密碼;

最后點(diǎn)擊配置,手機(jī)會(huì)將ssid以及對(duì)應(yīng)的密碼通過(guò)AP熱點(diǎn)發(fā)送到設(shè)備。

wKgaomXQnW6Ad5CrAA9xFE6PAlY180.gifpoYBAGJCzzCAI8MiAA9xFE6PAlY065.gif


審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • IOT
    IOT
    +關(guān)注

    關(guān)注

    190

    文章

    4424

    瀏覽量

    209653
  • 智能體重秤
    +關(guān)注

    關(guān)注

    0

    文章

    8

    瀏覽量

    1800
  • 華為云
    +關(guān)注

    關(guān)注

    3

    文章

    2836

    瀏覽量

    19372
  • OpenHarmony
    +關(guān)注

    關(guān)注

    33

    文章

    3974

    瀏覽量

    21361
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    AI大模型微調(diào)企業(yè)項(xiàng)目實(shí)戰(zhàn)

    自主可控大模型:企業(yè)微調(diào)實(shí)戰(zhàn)課,筑牢未來(lái) AI 底座 在人工智能席卷全球商業(yè)版圖的今天,企業(yè)對(duì)大模型(LLM)的態(tài)度已經(jīng)從“新奇觀望”轉(zhuǎn)變?yōu)椤叭鎿肀А薄H欢?,隨著應(yīng)用層面的不斷深入,一個(gè)嚴(yán)峻
    發(fā)表于 04-16 18:48

    九天菜菜大模型agent智能體開(kāi)發(fā)實(shí)戰(zhàn)2026一月班

    自主 AI 新范式:大模型 Agent 開(kāi)發(fā)實(shí)戰(zhàn)火爆開(kāi)課 在科技浪潮洶涌澎湃的當(dāng)下,人工智能領(lǐng)域正經(jīng)歷著一場(chǎng)深刻變革,大模型 Agent 開(kāi)發(fā)實(shí)戰(zhàn)課程如璀璨新星般閃耀登場(chǎng),迅速成為科技圈的熱門(mén)焦點(diǎn)
    發(fā)表于 04-15 16:04

    #OpenHarmony HDC調(diào)試

    OpenHarmony
    視美泰
    發(fā)布于 :2026年01月16日 09:46:28

    #OpenHarmony 鏡像燒錄

    OpenHarmony
    視美泰
    發(fā)布于 :2026年01月16日 09:42:36

    #OpenHarmony 系統(tǒng)概述

    OpenHarmony
    視美泰
    發(fā)布于 :2026年01月16日 09:39:20

    聲光協(xié)同,抬頭守護(hù):WT588F02KD-32N帶LED驅(qū)動(dòng)語(yǔ)音芯片重塑嬰兒體重體驗(yàn)

    達(dá)標(biāo)。”父母無(wú)需低頭,目光始終溫柔地落在安睡的嬰兒身上——這并非未來(lái)場(chǎng)景,而是廣州唯創(chuàng)電子WT588F02KD-32N帶LED驅(qū)動(dòng)語(yǔ)音芯片所賦能的新一代智能嬰兒體重帶來(lái)的
    的頭像 發(fā)表于 12-19 09:15 ?727次閱讀
    聲光協(xié)同,抬頭守護(hù):WT588F02KD-32N帶LED驅(qū)動(dòng)語(yǔ)音芯片重塑嬰兒<b class='flag-5'>體重</b><b class='flag-5'>秤</b>體驗(yàn)

    聲光守護(hù),精準(zhǔn)稱(chēng)重——WT588F02KD-32帶LED 驅(qū)動(dòng)語(yǔ)音芯片賦能嬰兒體重新體驗(yàn)

    小伙伴們好!今天我們要聊的話(huà)題,可能會(huì)讓很多新手爸媽眼前一亮——嬰兒體重。聽(tīng)起來(lái)是不是有點(diǎn)"平平無(wú)奇"?但等等,如果我告訴你,這個(gè)看似普通的小工具,正在經(jīng)歷一場(chǎng)"聲光
    的頭像 發(fā)表于 12-18 12:03 ?522次閱讀
    聲光守護(hù),精準(zhǔn)稱(chēng)重——WT588F02KD-32帶LED 驅(qū)動(dòng)語(yǔ)音芯片賦能嬰兒<b class='flag-5'>體重</b><b class='flag-5'>秤</b>新體驗(yàn)

    廣州唯創(chuàng)電子WT588F02KD-40N:當(dāng)電子學(xué)會(huì)“說(shuō)話(huà)”,一顆語(yǔ)音芯片如何重塑家庭健康終端?

    清晨的廚房,當(dāng)您站上智能電子,一個(gè)清晰溫柔的語(yǔ)音隨即響起:“您的體重是58.6公斤,體脂率22.3%?!边@不再是科幻電影中的場(chǎng)景,而是廣州唯創(chuàng)電子,通過(guò)一顆高度集成的語(yǔ)音芯片
    的頭像 發(fā)表于 11-13 08:56 ?865次閱讀
    廣州唯創(chuàng)電子WT588F02KD-40N:當(dāng)電子<b class='flag-5'>秤</b>學(xué)會(huì)“說(shuō)話(huà)”,一顆語(yǔ)音芯片如何重塑家庭健康終端?

    儲(chǔ)能項(xiàng)目從規(guī)劃到運(yùn)營(yíng)的全流程實(shí)戰(zhàn)指南

    隨著儲(chǔ)能技術(shù)的成熟和成本的下降,儲(chǔ)能項(xiàng)目正從示范走向規(guī)?;瘧?yīng)用。然而,從概念到落地,儲(chǔ)能項(xiàng)目需要經(jīng)歷一個(gè)系統(tǒng)化的實(shí)施過(guò)程。本文將提供一個(gè)從規(guī)劃到運(yùn)營(yíng)的全流程實(shí)戰(zhàn)指南,幫助項(xiàng)目方少走彎路
    的頭像 發(fā)表于 10-27 10:07 ?868次閱讀
    儲(chǔ)能<b class='flag-5'>項(xiàng)目</b>從規(guī)劃到運(yùn)營(yíng)的全流程<b class='flag-5'>實(shí)戰(zhàn)</b>指南

    項(xiàng)目實(shí)戰(zhàn)】基于Hi3861的鴻蒙智能小車(chē)(循跡、超聲波避障、遠(yuǎn)程控制、語(yǔ)音控制、4G定位)有教程代碼

    入門(mén)鴻蒙物聯(lián)網(wǎng)找不到“落地”項(xiàng)目——要么功能簡(jiǎn)單練不到核心,要么資料零散易半途而廢。本次【項(xiàng)目實(shí)戰(zhàn)】聚焦基于Hi3861的鴻蒙智能小車(chē),整合了循跡、超聲波避障、遠(yuǎn)程控制、語(yǔ)音交互和4G
    的頭像 發(fā)表于 09-10 17:13 ?1530次閱讀
    【<b class='flag-5'>項(xiàng)目</b><b class='flag-5'>實(shí)戰(zhàn)</b>】基于Hi3861的鴻蒙<b class='flag-5'>智能</b>小車(chē)(循跡、超聲波避障、遠(yuǎn)程控制、語(yǔ)音控制、4G定位)有教程代碼

    項(xiàng)目實(shí)戰(zhàn)】基于STM32F103的智能小車(chē)(遠(yuǎn)程控制、超聲波避障、循跡、紅外遙控)有教程代碼

    在嵌入式開(kāi)發(fā)學(xué)習(xí)中,實(shí)戰(zhàn)項(xiàng)目是將理論轉(zhuǎn)化為能力的最佳載體——本次【項(xiàng)目實(shí)戰(zhàn)】聚焦基于STM32的智能小車(chē),不僅整合了紅外遙控、微信小程序遠(yuǎn)程
    的頭像 發(fā)表于 09-08 16:06 ?1717次閱讀
    【<b class='flag-5'>項(xiàng)目</b><b class='flag-5'>實(shí)戰(zhàn)</b>】基于STM32F103的<b class='flag-5'>智能</b>小車(chē)(遠(yuǎn)程控制、超聲波避障、循跡、紅外遙控)有教程代碼

    廣州唯創(chuàng)電子WTN6040-8S語(yǔ)音芯片:智能電子體重的語(yǔ)音解決方案

    1.引言:智能健康管理的新需求隨著人們健康意識(shí)的不斷提升,智能電子體重已從簡(jiǎn)單的稱(chēng)重工具升級(jí)為綜合健康管理設(shè)備?,F(xiàn)代消費(fèi)者不僅需要精確測(cè)量體重
    的頭像 發(fā)表于 09-04 09:28 ?591次閱讀
    廣州唯創(chuàng)電子WTN6040-8S語(yǔ)音芯片:<b class='flag-5'>智能</b>電子<b class='flag-5'>體重</b><b class='flag-5'>秤</b>的語(yǔ)音解決方案

    智能藍(lán)牙廚房方案開(kāi)發(fā)設(shè)計(jì)

    隨著人們對(duì)健康飲食和烹飪便捷性的追求,傳統(tǒng)的廚房已經(jīng)無(wú)法滿(mǎn)足人們的需求?,F(xiàn)在,借助輝芒微8位MCU,我們可以打造一款智能藍(lán)牙廚房,它不僅具備高精度的稱(chēng)重功能,還能通過(guò)藍(lán)牙與手機(jī)無(wú)縫連接,實(shí)現(xiàn)數(shù)據(jù)
    的頭像 發(fā)表于 08-26 16:09 ?937次閱讀
    <b class='flag-5'>智能</b>藍(lán)牙廚房<b class='flag-5'>秤</b>方案開(kāi)發(fā)設(shè)計(jì)

    Ansible代碼上線(xiàn)項(xiàng)目實(shí)戰(zhàn)案例

    在DevOps浪潮中,自動(dòng)化部署已經(jīng)成為每個(gè)運(yùn)維工程師的必備技能。今天我將分享一個(gè)完整的Ansible代碼上線(xiàn)項(xiàng)目實(shí)戰(zhàn)案例,讓你的部署效率提升10倍!
    的頭像 發(fā)表于 07-24 14:03 ?760次閱讀

    【書(shū)籍評(píng)測(cè)活動(dòng)NO.61】Yocto項(xiàng)目實(shí)戰(zhàn)教程:高效定制嵌入式Linux系統(tǒng)

    《 Yocto項(xiàng)目實(shí)戰(zhàn)教程:高效定制嵌入式Linux系統(tǒng) 》應(yīng)運(yùn)而生。這本書(shū)在官方文檔的基礎(chǔ)上,結(jié)合筆者多年的嵌入式開(kāi)發(fā)經(jīng)驗(yàn),提煉核心理論框架,使其易讀易懂。同時(shí)輔以大量實(shí)踐案例,幫助讀者系統(tǒng)化
    發(fā)表于 05-21 10:00
    万安县| 乌拉特前旗| 木里| 岢岚县| 高州市| 布拖县| 兰州市| 吴忠市| 峨山| 万荣县| 巴林右旗| 华池县| 鹿泉市| 正定县| 南岸区| 青浦区| 灵石县| 孟连| 双流县| 嘉定区| 法库县| 故城县| 洛川县| 株洲县| 长垣县| 敦煌市| 万安县| 华坪县| 双鸭山市| 社会| 固镇县| 离岛区| 张家港市| 宁南县| 丰台区| 宜良县| 灵璧县| 兴文县| 江阴市| 威信县| 泰州市|