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

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

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

【開源項(xiàng)目】OpenHarmony挑戰(zhàn)賽-家庭醫(yī)生終端系統(tǒng)-血壓/心率/血氧檢測

電子發(fā)燒友論壇 ? 2022-09-21 09:47 ? 次閱讀

一、項(xiàng)目介紹

基于OpenHarmony使用HI3861實(shí)現(xiàn)血壓、心率、血氧的檢測和上傳(具有獨(dú)立APP)

采集被測人體血壓(高血壓/低血壓參數(shù))

采集被測人體心率參數(shù)

采集被測人體血氧參數(shù)

具有WEB配網(wǎng)功能

與服務(wù)器進(jìn)行連接并實(shí)現(xiàn)數(shù)據(jù)交互

可使用清潔能源(太陽能板進(jìn)行供電和充電)

開發(fā)基于OpenHarmony的控制APP

具有離線屏幕顯示功能(OLED-0.96寸)

3a4a2176-38da-11ed-b180-dac502259ad0.jpg

二、WEB配網(wǎng)

教程視頻


(1)碰一碰配網(wǎng)介紹

3a5f1cfc-38da-11ed-b180-dac502259ad0.png

通過一機(jī)一碼的形式,識別到NFC后云端驗(yàn)證設(shè)備,進(jìn)行彈窗拉起,再由NAN或AP的方式,實(shí)現(xiàn)發(fā)送配網(wǎng)的SSID和Password。

NAN配網(wǎng)

1. 操作設(shè)備上配網(wǎng)鍵讓設(shè)備進(jìn)入配網(wǎng)模式

2. 手機(jī)碰一碰設(shè)備上的NFC標(biāo)簽,拉起輕應(yīng)用

3. 選擇配網(wǎng)wifi

4. 調(diào)用 discoveryByNAN接口code為0

5. 調(diào)用connectDevice接口連接設(shè)備

6. 調(diào)用configDeviceNet接口開始配網(wǎng)

7. 調(diào)用disconnectDevice接口斷開網(wǎng)絡(luò)

8. 調(diào)用檢測設(shè)備是否上線接口

9. 檢測到設(shè)備上線,調(diào)用綁定設(shè)備接口

AP配網(wǎng)

1. 操作設(shè)備上配網(wǎng)鍵讓設(shè)備進(jìn)入配網(wǎng)模式

2. 手機(jī)碰一碰設(shè)備上的NFC標(biāo)簽,拉起輕應(yīng)用

3. 選擇配網(wǎng)wifi

4. 調(diào)用discoveryByNAN接口code不為0

5. 調(diào)用discoveryBySoftAp接口搜索當(dāng)前設(shè)備的ap,搜索不到的話嘗試直接去連接ap

6. 調(diào)用connectDevice接口連接設(shè)備

7. 調(diào)用configDeviceNet接口開始配網(wǎng)

8. 調(diào)用disconnectDevice接口斷開網(wǎng)絡(luò)

9. 調(diào)用檢測設(shè)備是否上線接口

10. 檢測到設(shè)備上線,調(diào)用綁定設(shè)備接口

(2)WEB配網(wǎng)

本章主要講述如何實(shí)現(xiàn)web配網(wǎng),是在STA模式下,模擬為一個(gè)網(wǎng)站服務(wù)器,當(dāng)手機(jī)或其它設(shè)備進(jìn)行訪問時(shí),檢測是否為瀏覽器的協(xié)議頭(HTTP),返回一個(gè)封裝好的網(wǎng)頁界面,通過網(wǎng)頁上輸入框的填寫實(shí)現(xiàn)配網(wǎng)。

3a6bee28-38da-11ed-b180-dac502259ad0.png

HTTP協(xié)議介紹:

1. http協(xié)議->超文本傳輸協(xié)議

2. 應(yīng)用:編寫基于http協(xié)議的數(shù)據(jù)傳輸程序(網(wǎng)站中瀏覽器端獲取網(wǎng)頁的過程)

3. http請求作用:將要獲取的內(nèi)容以http協(xié)議的格式發(fā)送給服務(wù)端,服務(wù)端根據(jù)格式進(jìn)行解析獲取到其真實(shí)內(nèi)容,將結(jié)果以http協(xié)議的格式回復(fù)給客戶端。

(3)WEB配網(wǎng)界面

html源代碼如下

"UTF-8" />"viewport" content="width=device-width, initial-scale=1.0">"X-UA-Compatible" content="ie=edge">程皖配網(wǎng)"my">"center">"16">歡迎使用程皖配網(wǎng) 
"center">WiFi名稱:"text" name="s" placeholder="請輸入您WiFi的名稱" id="aa" style="text-align:center">
"center">WiFi密碼:"text" name="p" placeholder="請輸入您WiFi的密碼" id="bb">
"center">服務(wù)器IP:"text" name="i" placeholder="請輸入您的服務(wù)器IP" id="cc">
"center">服務(wù)器端口:"text" name="t" placeholder="請輸入您的服務(wù)器端口" id="dd"> 
"center">"button" value="連接" onclick="wifi()" style="width:150px;height:40px" >"javascript">function wifi(){var ssid = my.s.value;var password =my.p.value;var tcp_ip = my.i.value;var tcp_port = my.t.value;var xmlhttp=new XMLHttpRequest();xmlhttp.open("GET","/HandleVal?ssid="+ssid+"&password="+password+"&tcp_ip="+tcp_ip+"&tcp_port="+tcp_port,true);xmlhttp.send()}

實(shí)現(xiàn)的效果如下:

3a7bafe8-38da-11ed-b180-dac502259ad0.png

(4)soft模式下實(shí)現(xiàn)網(wǎng)頁服務(wù)器

該部分步驟分為四步:打開WIFI、進(jìn)入softap模式,創(chuàng)建tcp服務(wù)器,解析HTTP指令。此處可參照

潤和開源項(xiàng)目:

https://gitee.com/hihopeorg/HarmonyOS-IoT-Application-Development/tree/master

1)打開WIFI

ret = hi_wifi_init(APP_INIT_VAP_NUM, APP_INIT_USR_NUM);
  if (ret != HISI_OK) {
    printf("wifi init failed!
");
  } else {
    printf("wifi init success!
");
  }

2)進(jìn)入softap模式

在softap.c文件下WifiAPTask函數(shù),注冊回調(diào)
  //注冊wifi事件的回調(diào)函數(shù)
  g_wifiEventHandler.OnHotspotStaJoin = OnHotspotStaJoinHandler;
  g_wifiEventHandler.OnHotspotStaLeave = OnHotspotStaLeaveHandler;
  g_wifiEventHandler.OnHotspotStateChanged = OnHotspotStateChangedHandler;

  error = RegisterWifiEvent(&g_wifiEventHandler);

3)創(chuàng)建socket通道后進(jìn)入判斷接受內(nèi)容循環(huán)

while (1)
    {
      if ((ret = recv(new_fd, recvbuf, sizeof(recvbuf), 0)) == -1)
      {
        printf("recv error 
");
      }else
      {
      //printf("recv :%s
", recvbuf);
      //返回s1中包含s2所有字符的最大起始段長度
      //size_t strspn(const char *s1, const char *s2);
      char* p= strstr(recvbuf,TEST);
      uint16_t DIR_buff = p - recvbuf;
      printf("
The GET HTTP num:%d
",DIR_buff);
      if(DIR_buff<10)
      {
       Set_clint_flag = 1;

      }else if(DIR_buff>40)
      {
       Set_clint_flag = 2;

       char *p1, *p2;
       p1 = strstr(recvbuf, "ssid=");
       p2 = strstr(recvbuf, "&password");
        if(p1!=0 && p2!=0 && p1
        {
          p1 += strlen("ssid=");
          memcpy(get_ssid, p1, p2 - p1);
          printf("
get the ssid = %s
", get_ssid); 
        }
       p1 = strstr(recvbuf, "password=");
       p2 = strstr(recvbuf, "&tcp_ip");
        if(p1!=0 && p2!=0 && p1
        {
          p1 += strlen("password=");
          memcpy(get_pwd, p1, p2 - p1);
          printf("get the ssid = %s
", get_pwd); 
        }
       WifiConnect(get_ssid,get_pwd);

      }else
      {
        Set_clint_flag = 3;
      }
      
      bzero(recvbuf, sizeof(recvbuf));
      //close(new_fd);
      }

      sleep(2);

      if(Set_clint_flag==1)
      {

    
      if ((ret = send(new_fd, httphard1, strlen(httphard1), 0)) == -1)
      {
        perror("send : ");
        
      }
      if ((ret = send(new_fd, webtr, strlen(webtr), 0)) == -1)
      {
        perror("send : ");
        
      }
        
        Set_clint_flag = 0;
        new_fd = -1;
        break;      
      }else if(Set_clint_flag==2)
      {
        Set_clint_flag = 0;
        new_fd = -1;
        WifiConnect(get_ssid,get_pwd);
        break;  
      }else if(Set_clint_flag==3)
      {
        Set_clint_flag = 0;
        new_fd = -1;
        break;   
      }
      sleep(2);
    }

在這個(gè)循環(huán)中實(shí)現(xiàn)了判斷當(dāng)前是否為HTTP指令,如果接收到訪問信號就回發(fā)網(wǎng)頁具體內(nèi)容,實(shí)現(xiàn)手機(jī)顯示網(wǎng)頁。

在填寫SSID和PWD后點(diǎn)擊提交,此時(shí)手機(jī)再向HI3861發(fā)出HTTP指令,中間攜帶填入的信息,該部分由以下程序讀?。?/span>

p1 = strstr(recvbuf, "ssid=");
       p2 = strstr(recvbuf, "&password");
        if(p1!=0 && p2!=0 && p1
        {
          p1 += strlen("ssid=");
          memcpy(get_ssid, p1, p2 - p1);
          printf("
get the ssid = %s
", get_ssid); 
        }

此時(shí)得到帳號密碼后嘗試連接,即實(shí)現(xiàn)網(wǎng)頁配網(wǎng)

WifiConnect(get_ssid,get_pwd);

三、外設(shè)驅(qū)動(dòng)

本系統(tǒng)使用到usart(PM2.5傳感器)、IIC(OLED顯示屏)、單總線(DHT11)三個(gè)部分和TCP(雙線程收發(fā))幾個(gè)部分

Winodows下HI3861開發(fā):



HI3861:鴻蒙網(wǎng)頁顯示傳感器數(shù)據(jù):


(1)打開外設(shè)使能

在usr_config.mk文件中去掉注釋

CONFIG_I2C_SUPPORT=y
CONFIG_UART0_SUPPORT=y

(2)OLED顯示屏驅(qū)動(dòng)

3a9059a2-38da-11ed-b180-dac502259ad0.png

OLED,即有機(jī)發(fā)光二極管(Organic Light-Emitting Diode),又稱為有機(jī)電激光顯示(Organic Electroluminesence Display)。OLED由于同時(shí)具備自發(fā)光,不需背光源、對比度高、厚度薄、視角廣、反應(yīng)速度快、可用于撓曲性面板、使用溫度范圍廣、構(gòu)造及制程較簡單等優(yōu)異之特性,被認(rèn)為是下一代的平面顯示器新興應(yīng)用技術(shù)。

該傳感器使用的IIC協(xié)議,經(jīng)過IIC使能后初始化OLED就可以使用了:

hi_io_set_func(HI_IO_NAME_GPIO_13, HI_IO_FUNC_GPIO_13_I2C0_SDA);
  hi_io_set_func(HI_IO_NAME_GPIO_14, HI_IO_FUNC_GPIO_14_I2C0_SCL);
  ret = hi_i2c_deinit(HI_I2C_IDX_0);
  ret |= hi_i2c_init(HI_I2C_IDX_0, 100000); 
  if (ret != HI_ERR_SUCCESS) {
    printf("IIC error
");
  }else
  {
    printf("IIC sucesefful
");
  }
  OLED_ColorTurn(0);//0正常顯示,1 反色顯示
  OLED_DisplayTurn(0);//0正常顯示 1 屏幕翻轉(zhuǎn)顯示

其中主要用到的函數(shù)是void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size1):

//在指定位置顯示一個(gè)字符,包括部分字符
//x:0~127
//y:0~63
//size:選擇字體 12/16/24
//取模方式 逐列式
void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size1)
{
u8 i,m,temp,size2,chr1;
u8 y0=y;
size2=(size1/8+((size1%8)?1:0))*(size1/2); //得到字體一個(gè)字符對應(yīng)點(diǎn)陣集所占的字節(jié)數(shù)
chr1=chr-' '; //計(jì)算偏移后的值
for(i=0;i
{
//temp=asc2_1206[chr1][i];
if(size1==12)
    {temp=asc2_1206[chr1][i];} //調(diào)用1206字體
else if(size1==16)
    {temp=asc2_1608[chr1][i];} //調(diào)用1608字體
else return;

    for(m=0;m<8;m++) ? ? ? ? ? //寫入數(shù)據(jù)
    {
      if(temp&0x80)OLED_DrawPoint(x,y);
      else OLED_ClearPoint(x,y);
      temp<<=1;
      y++;
      if((y-y0)==size1)
      {
        y=y0;
        x++;
        break;
      }
}
 }
}

通過該函數(shù),就能實(shí)現(xiàn)傳感器數(shù)值和字符的顯示。

(3)數(shù)據(jù)發(fā)送和接收

因?yàn)镠I3861的線程限制,這邊使用雙線程,一個(gè)實(shí)現(xiàn)TCP數(shù)據(jù)的發(fā)送,另一個(gè)實(shí)現(xiàn)TCP數(shù)據(jù)的接收

發(fā)送線程:

void TcpClientTest(const char* host, unsigned short port)
{
  ssize_t retval = 0;
  int sockfd = socket(AF_INET, SOCK_STREAM, 0); // TCP socket
  SET_SOCKET_ID = sockfd;
  struct sockaddr_in serverAddr = {0};
  serverAddr.sin_family = AF_INET; // AF_INET表示IPv4協(xié)議
  serverAddr.sin_port = htons(port); // 端口號,從主機(jī)字節(jié)序轉(zhuǎn)為網(wǎng)絡(luò)字節(jié)序
  if (inet_pton(AF_INET, host, &serverAddr.sin_addr) <= 0) { ?// 將主機(jī)IP地址從“點(diǎn)分十進(jìn)制”字符串 轉(zhuǎn)化為 標(biāo)準(zhǔn)格式(32位整數(shù))
    printf("inet_pton failed!
");
    goto do_cleanup;
  }

  // 嘗試和目標(biāo)主機(jī)建立連接,連接成功會(huì)返回0 ,失敗返回 -1
  if (connect(sockfd, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) < 0) {
    printf("connect failed!
");
    goto do_cleanup;
  }
  printf("connect to server %s success!
", host);
  Wifi_SOCKET_GET();

while (1)
{
  osDelay(500);
  /////////////////////////////////////////////////////////上傳函數(shù)
  retval = send(sockfd, buff, 6,0);//其中buff為數(shù)據(jù)
}

  do_cleanup:
  printf("do_cleanup...
");
  closesocket(sockfd);
}

接收處理線程:

static BOOL Wifi_SOCKET_RUN(void)
{
  ssize_t retval = 0;

  while(1)
  {

  retval = recv(SET_SOCKET_ID, &response, sizeof(response), 0);
    if(retval>0)
  {
    response[retval] = '';
    if(response[0] == 'o')
    {
      printf("send open!
");//此處對接收到的數(shù)據(jù)進(jìn)行處理,并執(zhí)行對應(yīng)內(nèi)容
    }
  }
  }
  do_cleanup:
  printf("do_cleanup...
");
  closesocket(SET_SOCKET_ID);
}

void Wifi_SOCKET_GET(void)
{
  osThreadAttr_t attr;

  attr.name = "Wifi_SOCKET_RUN";
  attr.attr_bits = 0U;
  attr.cb_mem = NULL;
  attr.cb_size = 0U;
  attr.stack_mem = NULL;
  attr.stack_size = 2048;
  attr.priority = 25;

  if (osThreadNew((osThreadFunc_t)Wifi_SOCKET_RUN, NULL, &attr) == NULL)
  {
    printf("Falied to create WifiAPTask!
");
  }
}

(4)血壓測量驅(qū)動(dòng)

3aa384e6-38da-11ed-b180-dac502259ad0.png


血壓的測量選擇使用便攜式測量,在開發(fā)中已與電子血壓儀行業(yè)標(biāo)桿歐姆龍和傳統(tǒng)水銀血壓儀進(jìn)行比較,較為準(zhǔn)確,可作為參考使用。

當(dāng)前為使用第一階段,與廠商(批量)第二階段合作時(shí)可以得到更多的數(shù)據(jù),可以當(dāng)做一次小型的體檢,如下圖:

3ab6d438-38da-11ed-b180-dac502259ad0.jpg


其驅(qū)動(dòng)方式為USART驅(qū)動(dòng),協(xié)議如下:

3ad02122-38da-11ed-b180-dac502259ad0.png


通過對數(shù)據(jù)的截取和發(fā)送即可實(shí)現(xiàn)。

四、APP開發(fā)

(1)環(huán)境搭建

3adba7e0-38da-11ed-b180-dac502259ad0.png

使用的是官方下載地址:

https://developer.harmonyos.com/cn/develop/deveco-studio#download_beta

我這邊用的是今年三月份的版本,不過不影響,界面沒什么變化

(2)TCP數(shù)據(jù)交互

該部分參考官方手冊:

https://docs.openharmony.cn/pages/v3.2Beta/zh-cn/application-dev/reference/apis/js-apis-socket.md/

import socket from '@ohos.net.socket';
let tcp = socket.constructTCPSocketInstance();

tcp.bind({address: '0.0.0.0', port: 12121, family: 1}, err => {
 if (err) {
  console.log('bind fail');
  return;
 }
 console.log('bind success');
})

tcp.on('message', value => {
 console.log("on message, message:" + value.message + ", remoteInfo:" + value.remoteInfo)
 let da = resolveArrayBuffer(value.message);
 let dat_buff = String(da);
//此處對接受到的數(shù)據(jù)進(jìn)行處理



});
//將接受到的數(shù)據(jù)轉(zhuǎn)化為文本型      
function resolveArrayBuffer(message){

 if (message instanceof ArrayBuffer) {
  let dataView = new DataView(message)
  let str = ""
  for (let i = 0;i < dataView.byteLength; ++i) {
   let c = String.fromCharCode(dataView.getUint8(i))
   if (c !== "
") {
    str += c
   }
  }
  return str;
 }
}
//數(shù)據(jù)的發(fā)送函數(shù)
function send_once(Con_buff) {
 if (flag == false) {

  let promise = tcp.connect({ address: { address: 'xxx.xxx.xxx.xxx', port: xxxx, family: 1 }, timeout: 2000 });
  promise.then(() => {
   console.log('connect success');
   flag = true;
   tcp.send({
    data: Con_buff
   }, err => {
    if (err) {
     console.log('send fail');
     return;
    }
    console.log('send success');
   })
  }).catch(err => {
   console.log('connect fail');
  });

 } else if (flag == true) {
  tcp.send({
   data: Con_buff
  }, err => {
   if (err) {
    console.log('send fail');
    return;
   }
   console.log('send success');
  })
 }
}

(3)界面設(shè)計(jì)

OpenHarmony界面設(shè)計(jì)(簡單)教程:


本APP共用到了按鈕、圖片、標(biāo)簽三個(gè)部分,其對應(yīng)的官網(wǎng)連接如下

按鈕(Button):

https://docs.openharmony.cn/pages/v3.2Beta/zh-cn/application-dev/reference/arkui-ts/ts-basic-components-button.md/

圖片(Image):

https://docs.openharmony.cn/pages/v3.2Beta/zh-cn/application-dev/reference/arkui-ts/ts-basic-components-image.md/

標(biāo)簽(TEXT):

https://docs.openharmony.cn/pages/v3.2Beta/zh-cn/application-dev/reference/arkui-ts/ts-basic-components-text.md/

豎向排列(Column):

https://docs.openharmony.cn/pages/v3.2Beta/zh-cn/application-dev/reference/arkui-ts/ts-container-column.md/

橫向排列(Row):

https://docs.openharmony.cn/pages/v3.2Beta/zh-cn/application-dev/reference/arkui-ts/ts-container-row.md/

(4)參數(shù)動(dòng)態(tài)更新

@State srtText: string = "測試變量";
 Text(this.srtText) //動(dòng)態(tài)
    .fontSize(60)
    .fontWeight(FontWeight.Bold)
    .fontColor("#e94674")
   Button() {  //按鈕控件
    Text('點(diǎn)擊')
     .fontSize(50)
     .fontWeight(FontWeight.Bold)
   }.type(ButtonType.Capsule)
   .margin({
    top: 200
   })
   .width('50%')
   .height('10%')
   .backgroundColor('#0D9FFB')
   .onClick(() => {  //點(diǎn)擊事件
     this.srtText = "更改內(nèi)容"http://更改數(shù)據(jù)
   })

在使用 @State變量對組件進(jìn)行刷新時(shí),發(fā)現(xiàn)只能在build中實(shí)現(xiàn)動(dòng)態(tài)刷新,在外部創(chuàng)建全局變量或者外部函數(shù)的方式都不能實(shí)現(xiàn),查閱資料后得到如下部分:

官方文檔:

https://docs.openharmony.cn/pages/v3.1/zh-cn/application-dev/ui/ts-application-states-appstorage.md/

AppStorage與組件同步

在管理組件擁有的狀態(tài)中,已經(jīng)定義了如何將組件的狀態(tài)變量與父組件或祖先組件中的@State裝飾的狀態(tài)變量同步,主要包括@Prop、@Link、@Consume。

本章節(jié)定義如何將組件變量與AppStorage同步,主要提供@StorageLink和@StorageProp裝飾器。

@StorageLink裝飾器

組件通過使用@StorageLink(key)裝飾的狀態(tài)變量,與AppStorage建立雙向數(shù)據(jù)綁定,key為AppStorage中的屬性鍵值。當(dāng)創(chuàng)建包含@StorageLink的狀態(tài)變量的組件時(shí),該狀態(tài)變量的值將使用AppStorage中的值進(jìn)行初始化。在UI組件中對@StorageLink的狀態(tài)變量所做的更改將同步到AppStorage,并從AppStorage同步到任何其他綁定實(shí)例中,如PersistentStorage或其他綁定的UI組件。

@StorageProp裝飾器

組件通過使用@StorageProp(key)裝飾的狀態(tài)變量,將與AppStorage建立單向數(shù)據(jù)綁定,key標(biāo)識AppStorage中的屬性鍵值。當(dāng)創(chuàng)建包含@StoageProp的狀態(tài)變量的組件時(shí),該狀態(tài)變量的值將使用AppStorage中的值進(jìn)行初始化。AppStorage中的屬性值的更改會(huì)導(dǎo)致綁定的UI組件進(jìn)行狀態(tài)更新。

let varA = AppStorage.Link('varA')
let envLang = AppStorage.Prop('languageCode')
@Entry
@Component
struct ComponentA {
 @StorageLink('varA') varA: number = 2
 @StorageProp('languageCode') lang: string = 'en'
 private label: string = 'count'

 private aboutToAppear() {
  this.label = (this.lang === 'zh') ? '數(shù)' : 'Count'
 }

 build() {
  Row({ space: 20 }) {

   Button(`${this.label}: ${this.varA}`)
    .onClick(() => {
     AppStorage.Set('varA', AppStorage.Get('varA') + 1)
    })
   Button(`lang: ${this.lang}`)
    .onClick(() => {
     if (this.lang === 'zh') {
      AppStorage.Set('languageCode', 'en')
     } else {
      AppStorage.Set('languageCode', 'zh')
     }
     this.label = (this.lang === 'zh') ? '數(shù)' : 'Count'
    })
  }
 }
}

即通過AppStorage.Link和 @StorageLink的方式,可實(shí)現(xiàn)外部動(dòng)態(tài)刷新Text組件和image組件(等等之類都可以),方便我們在全局調(diào)用時(shí)更新數(shù)據(jù)。

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

    關(guān)注

    25

    文章

    3731

    瀏覽量

    16431
收藏 人收藏

    評論

    相關(guān)推薦

    AFE4403能同時(shí)測心率嗎?

    我想用新日本無線的NJL5510RC傳感器測,用它的NJL5310R測心率,AFE4403能同時(shí)測
    發(fā)表于 01-15 06:22

    優(yōu)秀獎(jiǎng)及決賽陣容震撼公布 第二屆OpenHarmony創(chuàng)新應(yīng)用挑戰(zhàn)賽決戰(zhàn)在即

    開源作為科技革新的重要協(xié)作模式,已成為推動(dòng)全球信息技術(shù)發(fā)展的關(guān)鍵驅(qū)動(dòng)力。作為開源技術(shù)創(chuàng)新的重要賽事平臺(tái),OpenHarmony創(chuàng)新應(yīng)用挑戰(zhàn)賽自創(chuàng)辦以來,始終秉持開放與創(chuàng)新的理念,激發(fā)開
    的頭像 發(fā)表于 01-14 09:07 ?96次閱讀
    優(yōu)秀獎(jiǎng)及決賽陣容震撼公布  第二屆<b class='flag-5'>OpenHarmony</b>創(chuàng)新應(yīng)用<b class='flag-5'>挑戰(zhàn)賽</b>決戰(zhàn)在即

    EDA精英挑戰(zhàn)賽果公布!思爾芯“戰(zhàn)隊(duì)”薪火相承斬獲“麒麟杯”

    2024中國研究生創(chuàng)芯大賽·EDA精英挑戰(zhàn)賽12月7-8日,2024中國研究生創(chuàng)芯大賽·EDA精英挑戰(zhàn)賽(原“集成電路EDA設(shè)計(jì)精英挑戰(zhàn)賽”)總決賽及頒獎(jiǎng)典禮在南京成功舉辦。此次大賽,思爾芯作為核心
    的頭像 發(fā)表于 12-11 01:03 ?387次閱讀
    EDA精英<b class='flag-5'>挑戰(zhàn)賽</b><b class='flag-5'>賽</b>果公布!思爾芯“戰(zhàn)隊(duì)”薪火相承斬獲“麒麟杯”

    CCF開源創(chuàng)新大賽決賽結(jié)果發(fā)布!OpenHarmony應(yīng)用開發(fā)賽道盡展風(fēng)采

    經(jīng)過數(shù)月的激烈比拼與項(xiàng)目展示,第七屆CCF開源創(chuàng)新大賽決賽結(jié)果揭榜!其中,深開鴻的“OpenHarmony應(yīng)用開發(fā)-開源項(xiàng)目貢獻(xiàn)
    的頭像 發(fā)表于 11-07 08:07 ?308次閱讀
    CCF<b class='flag-5'>開源</b>創(chuàng)新大賽決賽結(jié)果發(fā)布!<b class='flag-5'>OpenHarmony</b>應(yīng)用開發(fā)賽道盡展風(fēng)采

    2024年ICPC與華為挑戰(zhàn)賽冠軍杯圓滿落幕

    近日,2024年ICPC&華為挑戰(zhàn)賽冠軍杯在深圳圓滿落幕。該活動(dòng)由華為和ICPC聯(lián)合舉辦,匯聚全球頂尖的編程人才,共同探討和解決具有挑戰(zhàn)性的工業(yè)界真實(shí)問題,并對未來技術(shù)發(fā)展趨勢及關(guān)鍵挑戰(zhàn)展開討論。今年的
    的頭像 發(fā)表于 10-27 16:00 ?836次閱讀

    50萬獎(jiǎng)金池!開放原子大賽——第二屆OpenHarmony創(chuàng)新應(yīng)用挑戰(zhàn)賽正式啟動(dòng)

    第二屆OpenHarmony創(chuàng)新應(yīng)用挑戰(zhàn)賽作為開放原子大賽旗下的重要項(xiàng),聚焦 OpenHarmony應(yīng)用開發(fā),致力提升開發(fā)者的動(dòng)手實(shí)踐能力與開發(fā)創(chuàng)新應(yīng)用的能力。
    發(fā)表于 10-24 15:40

    Cortex-A55人工智能教學(xué)實(shí)驗(yàn)箱操作教程_案例分享:5-26 檢測實(shí)驗(yàn)

    的。 MAX30100芯片 MAX30100是一款集成有脈搏儀和心率監(jiān)測傳感器芯片,該芯片集成了兩個(gè)LED、一個(gè)光電探測器、經(jīng)過優(yōu)化的光學(xué)器件和低噪聲模擬信號處理器,可以檢測脈搏
    發(fā)表于 10-15 16:34

    思爾芯題正式發(fā)布,邀你共戰(zhàn)EDA精英挑戰(zhàn)賽!

    題發(fā)布COMPETITIONRELEASE2024中國研究生創(chuàng)芯大賽·EDA精英挑戰(zhàn)賽(原“集成電路EDA設(shè)計(jì)精英挑戰(zhàn)賽”)現(xiàn)已正式拉開帷幕。作為核心出題企業(yè)之一思爾芯(S2C),已經(jīng)為你們準(zhǔn)備了
    的頭像 發(fā)表于 08-03 08:24 ?704次閱讀
    思爾芯<b class='flag-5'>賽</b>題正式發(fā)布,邀你共戰(zhàn)EDA精英<b class='flag-5'>挑戰(zhàn)賽</b>!

    基于STM32單片機(jī)的心率監(jiān)測系統(tǒng)設(shè)計(jì)

    系統(tǒng)內(nèi)使用STM32單片機(jī)進(jìn)行主控,使用血心率傳感器可以進(jìn)行心率
    的頭像 發(fā)表于 06-26 11:15 ?2291次閱讀
    基于STM32單片機(jī)的<b class='flag-5'>血</b><b class='flag-5'>氧</b><b class='flag-5'>心率</b>監(jiān)測<b class='flag-5'>系統(tǒng)</b>設(shè)計(jì)

    開放原子開源大賽OpenHarmony智能化應(yīng)用生態(tài)挑戰(zhàn)賽決賽路成功舉辦

    軟件定義世界,開源共筑未來。在江蘇省工信廳、市工信局、開放原子開源基金會(huì)及相關(guān)單位的指導(dǎo)和支持下,4月19-20日,由中軟國際教育科技集團(tuán)聯(lián)合舉辦的開放原子開源大賽-OpenHarmony
    的頭像 發(fā)表于 04-24 09:48 ?433次閱讀

    軟通動(dòng)力子公司鴻湖萬聯(lián)成功舉辦基于x86架構(gòu)的OpenHarmony應(yīng)用生態(tài)挑戰(zhàn)賽

    應(yīng)用生態(tài)挑戰(zhàn)賽”決賽路演在無錫圓滿落幕。本次挑戰(zhàn)賽歷時(shí)近3個(gè)月,受到了來自企業(yè)、院校以及個(gè)人開發(fā)者等多個(gè)領(lǐng)域的廣泛關(guān)注和積極響應(yīng),超過120個(gè)團(tuán)隊(duì)/個(gè)人踴躍報(bào)名參賽
    的頭像 發(fā)表于 04-23 09:34 ?425次閱讀
    軟通動(dòng)力子公司鴻湖萬聯(lián)成功舉辦基于x86架構(gòu)的<b class='flag-5'>OpenHarmony</b>應(yīng)用生態(tài)<b class='flag-5'>挑戰(zhàn)賽</b>

    鴻湖萬聯(lián)成功舉辦基于x86架構(gòu)的OpenHarmony應(yīng)用生態(tài)挑戰(zhàn)賽

    近日,由開放原子開源基金會(huì)、央視網(wǎng)、江蘇省工業(yè)和信息化廳、無錫市人民政府、江蘇軟件產(chǎn)業(yè)人才發(fā)展基金會(huì)、蘇州工業(yè)園區(qū)、無錫高新區(qū)等共同承辦,鴻湖萬聯(lián)參與共建的“基于x86架構(gòu)的OpenHarmony應(yīng)用生態(tài)挑戰(zhàn)賽”決賽路演在無錫圓
    的頭像 發(fā)表于 04-23 09:26 ?365次閱讀
    鴻湖萬聯(lián)成功舉辦基于x86架構(gòu)的<b class='flag-5'>OpenHarmony</b>應(yīng)用生態(tài)<b class='flag-5'>挑戰(zhàn)賽</b>

    便攜式心率檢測

    便攜式心率檢測儀使用了一款醫(yī)療級別的傳感器MAX30102;MAX30102是一個(gè)集成的脈搏
    的頭像 發(fā)表于 03-27 09:16 ?695次閱讀
    便攜式<b class='flag-5'>心率</b><b class='flag-5'>血</b><b class='flag-5'>氧</b><b class='flag-5'>檢測</b>儀

    開放原子開源大賽—基于OpenHarmony的團(tuán)結(jié)引擎應(yīng)用開發(fā)正式啟動(dòng)!

    “基于OpenHarmony的團(tuán)結(jié)引擎應(yīng)用開發(fā)”是開放原子全球開源大賽下開設(shè)的新興及應(yīng)用題之一,本次
    發(fā)表于 03-13 10:45

    XBLW芯伯樂|指夾式儀方案及算法程序

    儀廣泛應(yīng)用于醫(yī)院、家庭、體育訓(xùn)練場所等場景。在醫(yī)院中,儀常被用于監(jiān)測患者在手術(shù)、重癥監(jiān)護(hù)、麻醉等環(huán)境下的
    的頭像 發(fā)表于 01-26 00:00 ?961次閱讀
    XBLW芯伯樂|指夾式<b class='flag-5'>血</b><b class='flag-5'>氧</b>儀方案及算法程序