偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

鴻蒙設(shè)備開(kāi)發(fā)Hi3861-IoT落地-自動(dòng)門(mén)鎖

物聯(lián)網(wǎng) 物聯(lián)網(wǎng)應(yīng)用
有一天半夜宿舍門(mén)被一個(gè)喝暈的哥們打開(kāi)了,(說(shuō)他暈吧他居然知道鑰匙在門(mén)框上)于是有了設(shè)計(jì)自動(dòng)門(mén)鎖的想法。正好一直想用Hi3861做一個(gè)iot落地項(xiàng)目【之前挖的坑】,一切剛好!

[[443292]]

想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

1. 項(xiàng)目來(lái)源

有一天半夜宿舍門(mén)被一個(gè)喝暈的哥們打開(kāi)了,(說(shuō)他暈吧他居然知道鑰匙在門(mén)框上)于是有了設(shè)計(jì)自動(dòng)門(mén)鎖的想法。正好一直想用Hi3861做一個(gè)iot落地項(xiàng)目【之前挖的坑】,一切剛好!

2. 需求分析

無(wú)鑰匙進(jìn)入

手機(jī)端操作

不影響使用鑰匙開(kāi)門(mén)

無(wú)損安裝、卸載自動(dòng)開(kāi)門(mén)機(jī)構(gòu)

3. 宿舍門(mén)鎖考察

水平向右移動(dòng)拉閂1cm左右即可開(kāi)門(mén),由于宿舍們老舊,拉力實(shí)測(cè)在2.5L水左右。經(jīng)過(guò)粗略計(jì)算,如果使用9g舵機(jī)來(lái)驅(qū)動(dòng),單杠驅(qū)動(dòng)結(jié)構(gòu)的話(huà),杠桿長(zhǎng)度比為2500/9≈278,尺寸有些夸張。不想在機(jī)械結(jié)構(gòu)上費(fèi)時(shí)間,所以選取大扭矩舵機(jī)驅(qū)動(dòng)。 #星光計(jì)劃2.0# 鴻蒙設(shè)備開(kāi)發(fā)Hi3861-IoT落地-自動(dòng)門(mén)鎖(附多案例-鴻蒙HarmonyOS技術(shù)社區(qū)

4.方案設(shè)計(jì)

4.1 機(jī)械結(jié)構(gòu)

典型的曲柄滑塊結(jié)構(gòu)。選取了繩索拉動(dòng)、連桿方案。綜合考慮耐用度和安裝便攜性,選取繩索驅(qū)動(dòng)方案。

使用套殼的方式安裝在門(mén)鎖體上,拉閂自由移動(dòng),不影響手動(dòng)開(kāi)門(mén)。

 #星光計(jì)劃2.0# 鴻蒙設(shè)備開(kāi)發(fā)Hi3861-IoT落地-自動(dòng)門(mén)鎖(附多案例-鴻蒙HarmonyOS技術(shù)社區(qū)

4.2 控制邏輯

Hi3861根據(jù)web端發(fā)送過(guò)來(lái)的質(zhì)量控制舵機(jī)轉(zhuǎn)動(dòng)即可??刂菩盘?hào)來(lái)源于web端,采用MQTT協(xié)議來(lái)處理數(shù)據(jù),電源使用5V 2A模塊,一路單獨(dú)給舵機(jī)。

 #星光計(jì)劃2.0# 鴻蒙設(shè)備開(kāi)發(fā)Hi3861-IoT落地-自動(dòng)門(mén)鎖(附多案例-鴻蒙HarmonyOS技術(shù)社區(qū)

5. 軟件層

5.1 MQTT移值

這個(gè)直接參考連老師的這篇文章【如何在鴻蒙系統(tǒng)中移植 Paho-MQTT 實(shí)現(xiàn)MQTT協(xié)議】即可,感謝連老師!

本項(xiàng)目只需要將:服務(wù)器地址改為自己的IP、訂閱自己web端的Topic、提取消息數(shù)據(jù)。

主要代碼如下:

  1. /*連接web端  只展示主要邏輯,完整見(jiàn)附件*/ 
  2. int mqtt_connect(void) 
  3. {    
  4.       //0.連接web端 
  5.     char* payload = "Hello Kun,have a Nice Day!"
  6.     int payloadlen = strlen(payload); 
  7.     int len = 0; 
  8.     char *host = "192.168.xxx.xx";  //自己的ip 
  9.     int port = 1883;                //mqtt服務(wù)端口 
  10.     mysock = transport_open(host, port); 
  11.     /* 1.訂閱web端話(huà)題  */ 
  12.     topicString.cstring = "porsche"
  13.     if (MQTTPacket_read(buf, buflen, transport_getdata) == SUBACK)  /* wait for suback */ 
  14.     {  
  15.         rc = MQTTDeserialize_suback(&submsgid, 1, &subcount, &granted_qos, buf, buflen); 
  16.     } 
  17.     /*2. 循環(huán)接收發(fā)布者的話(huà)題消息 */ 
  18.     topicString.cstring = "hi3861"
  19.     char door_passward[] ="notfound404"; //開(kāi)門(mén)密令 
  20.     char cmd_msg[12]; //存儲(chǔ)web端發(fā)來(lái)的數(shù)據(jù) 
  21.     while (!toStop) 
  22.     { 
  23.         if (MQTTPacket_read(buf, buflen, transport_getdata) == PUBLISH) 
  24.         { 
  25.             MQTTString receivedTopic; 
  26.             rc = MQTTDeserialize_publish(&dup, &qos, &retained, &msgid, &receivedTopic, 
  27.                     &payload_in, &payloadlen_in, buf, buflen); 
  28.             for ( i = 0; i < payloadlen_in; i++) 
  29.             { 
  30.                 cmd_msg[i]=*payload_in; //save message from MQTT web 
  31.                 payload_in++; //pointer  
  32.                 printf("%c",cmd_msg[i]); 
  33.             } 
  34.             printf("cmd_msg:%s\n",cmd_msg);  
  35.         } 

5.2 .舵機(jī)控制

Hi3861控制舵機(jī)之前【這篇文章】有配置過(guò),調(diào)整20ms控制周期內(nèi)高電平的占空比模擬PWM代碼如下,進(jìn)行了一下簡(jiǎn)單的封裝,使用哪個(gè)IO口記得要初始化輸出即可。

  1. /** * @brief  Servo  control * 
  2.  @param servoID number of servo (GPIO) 7-8-9-10 *  
  3.  @param angle  input value: 0-200 *               
  4. */ 
  5. void My_servo(uint8_t servoID,int angle) 
  6. {        
  7.      int j=0;    
  8.      int k=2000/200; //實(shí)際應(yīng)該是2000/180 
  9.      angle = k*angle;    
  10.      for (j=0;j<5;j++) 
  11.       {      
  12.            GpioSetOutputVal(servoID, 1);         
  13.             hi_udelay(angle); //angle ms         
  14.            GpioSetOutputVal(servoID, 0);         
  15.            hi_udelay(20000-angle);//     
  16.        }//20ms 控制舵機(jī)          
  17. }  

5.3 業(yè)務(wù)邏輯

獲取web端數(shù)據(jù)、匹配開(kāi)門(mén)密令是否一致、一致則開(kāi)門(mén)、每次輸入密令可以開(kāi)門(mén)三次、也可以一鍵上鎖。

項(xiàng)目完整工程見(jiàn)附件1主要代碼如下:

  1. /*邏輯代碼為了適應(yīng)另外一個(gè)iot項(xiàng)目??雌饋?lái)比較臃腫,但能用*/ 
  2. int count =3; //開(kāi)門(mén)次數(shù) 
  3. switch (cmd_msg[0]) 
  4.     case 'a': //一鍵開(kāi)門(mén) 
  5.         printf("up\n"); 
  6.         cmd_msg[0]='n'
  7.         break; 
  8.     case 'z': //一鍵上鎖 
  9.         printf("down\n"); 
  10.         cmd_msg[0]='p'
  11.         count = 3; 
  12.         break; 
  13.     case 's': //連接上led閃爍 
  14.         printf("Start\n"); 
  15.         GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 0); 
  16.         usleep(LED_INTERVAL_TIME_US); 
  17.         GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 1); 
  18.         usleep(LED_INTERVAL_TIME_US); 
  19.         break; 
  20.     default
  21.         break; 
  22. if(!(strcmp(cmd_msg,door_passward))) 
  23.     if(count
  24.     {   count --; 
  25.         printf("Open the Door!\n"); 
  26.         My_servo(10,100); 
  27.     } 
  28.     else count = 0; 
  29. else  
  30.     printf("Close the Door!\n"); 
  31.     My_servo(10,50); 

6. 測(cè)試 【見(jiàn)視頻-3min10s

 #星光計(jì)劃2.0# 鴻蒙設(shè)備開(kāi)發(fā)Hi3861-IoT落地-自動(dòng)門(mén)鎖(附多案例-鴻蒙HarmonyOS技術(shù)社區(qū)

7. 其他案例

7.1 心率傳感器

使用I2C通信,查看數(shù)據(jù)手冊(cè)后,更具時(shí)許來(lái)讀取數(shù)據(jù),比較簡(jiǎn)單,參考MPU6050的讀取方式。

這里展示一下讀取max30102原始數(shù)據(jù)的函數(shù),完整資源見(jiàn)附件2。代碼如下:

  1. /** 
  2.  * @brief Send Write command to MAX30102 device before Read a register. 
  3.  * @param regAddr the register address to Read or Writen. 
  4.  * @return Returns{@link IOT_SUCCESS} if the operation is successful; 
  5.  *  returns an error code defined in {@link iot_errno.h} otherwise. 
  6.  * */  
  7. uint8_t MAX_Cmd(uint8_t regAddr) 
  8. {  
  9.     hi_i2c_idx id = MAX_I2C_IDX; 
  10.     uint8_t buffer[] = {regAddr}; 
  11.     hi_i2c_data i2cData; 
  12.     i2cData.receive_buf = NULL
  13.     i2cData.receive_len = 0; 
  14.     i2cData.send_buf = buffer; 
  15.     i2cData.send_len = sizeof(buffer)/sizeof(buffer[0]); 
  16.     return hi_i2c_write((hi_i2c_idx)id, MAX30102_WR_address, &i2cData); //==發(fā)送器件地址+寫(xiě)命令 + 寄存器regAddr  
  17.  
  18. /** 
  19.  * @brief Read a data byte from  MAX30102 device. 
  20.  * @param  regAddr the register address.  8bit data 
  21.  * @return *data 
  22.  * */ 
  23. uint32_t MAX_Read_Data(uint8_t regAddr, uint8_t *data, unsigned int dataLen) 
  24.     hi_i2c_idx id = MAX_I2C_IDX; 
  25.     hi_i2c_data i2cData; 
  26.     i2cData.send_buf = NULL
  27.     i2cData.send_len = 0; 
  28.     i2cData.receive_buf = data; 
  29.     i2cData.receive_len = dataLen; 
  30.     MAX_Cmd(regAddr); // write device add 0xAE + reg_ADD [目標(biāo)寄存器] 
  31.     return hi_i2c_read((hi_i2c_idx)id, I2C_READ_ADDR, &i2cData); 
  32.  
  33. /** 
  34.  * @brief read FIFO data in max30102 FIFO register 0x07 
  35.  *  
  36.  * @param RED_channel_data  
  37.  * @param IR_channel_data  
  38.  */ 
  39. void max30102_FIFO_Read_Data(uint8_t *RED_channel_data, uint8_t *IR_channel_data) 
  40.     uint8_t buff[6]; //LSB 
  41.     /*組合數(shù)據(jù) 
  42.     uint8_t H,M,L; 
  43.     H=buff[0]&0x03; //bit17-bit16 
  44.     M=buff[1];      //bit8-bit15 
  45.     L=buff[2];      //bit0-bit7 
  46.     *RED_channel_data = (H<<16)|(M<<8)|L; */ 
  47.     int res; 
  48.     res=MAX_Read_Data(REG_FIFO_DATA, &buff ,6); 
  49.     if(res == IOT_SUCCESS) 
  50.     { 
  51.        *RED_channel_data=((buff[0]<<16)|(buff[1]<<8)|(buff[2]) & 0x03ffff);  //buff[0-2] 組合 
  52.        *IR_channel_data=((buff[3]<<16)|(buff[4]<<8)|(buff[5]) & 0x03ffff);  //buff[3-5] 組合 
  53.     } 
  54.  

讀取到的數(shù)據(jù):

 #星光計(jì)劃2.0# 鴻蒙設(shè)備開(kāi)發(fā)Hi3861-IoT落地-自動(dòng)門(mén)鎖(附多案例-鴻蒙HarmonyOS技術(shù)社區(qū)

7.2 Hi3861-潤(rùn)和套件開(kāi)發(fā)案例

套件的模塊除了NFC之外,其他都開(kāi)發(fā)了一遍,不一一細(xì)說(shuō)了,具體內(nèi)容見(jiàn)附件3-個(gè)人開(kāi)發(fā)PPT。

 #星光計(jì)劃2.0# 鴻蒙設(shè)備開(kāi)發(fā)Hi3861-IoT落地-自動(dòng)門(mén)鎖(附多案例-鴻蒙HarmonyOS技術(shù)社區(qū)
 #星光計(jì)劃2.0# 鴻蒙設(shè)備開(kāi)發(fā)Hi3861-IoT落地-自動(dòng)門(mén)鎖(附多案例-鴻蒙HarmonyOS技術(shù)社區(qū)

結(jié)語(yǔ):

NFC開(kāi)門(mén)是不是更加便捷呢? 手里沒(méi)有運(yùn)行HarmoneyOS的手機(jī),軟總線(xiàn)方案技術(shù)上自己估計(jì)做不到,先做做硬件層的吧,下一步抽空實(shí)現(xiàn),只要有NFC功能的手機(jī)都可開(kāi)門(mén)~估計(jì)得明年嘍

文章相關(guān)附件可以點(diǎn)擊下面的原文鏈接前往下載

https://harmonyos.51cto.com/resource/1627

https://harmonyos.51cto.com/resource/1628

https://harmonyos.51cto.com/resource/1629

想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

 

責(zé)任編輯:jianghua 來(lái)源: 鴻蒙社區(qū)
相關(guān)推薦

2023-05-26 16:07:14

Hi3861Wifi模塊

2022-11-29 16:29:50

設(shè)備開(kāi)發(fā)UDP

2021-04-29 09:52:25

鴻蒙HarmonyOS應(yīng)用

2022-11-24 14:44:33

傳輸控制協(xié)議設(shè)備開(kāi)發(fā)

2021-04-26 15:19:02

鴻蒙HarmonyOS應(yīng)用

2021-04-30 09:43:27

鴻蒙HarmonyOS應(yīng)用

2022-08-19 10:54:47

操作系統(tǒng)鴻蒙

2021-12-15 15:28:18

鴻蒙HarmonyOS應(yīng)用

2020-12-15 11:57:49

Hi3861 HarmonyOS開(kāi)發(fā)板

2020-11-06 10:15:16

HiBurn

2020-10-14 09:37:03

HiBurn鴻蒙.bin文件

2020-10-16 09:50:37

Hi3861WiFi熱點(diǎn)

2021-09-16 10:03:39

鴻蒙HarmonyOS應(yīng)用

2020-11-02 12:07:11

鴻蒙 GPIO

2021-12-20 21:01:52

鴻蒙HarmonyOS應(yīng)用

2020-10-30 17:12:05

Hi3861

2020-12-17 10:02:16

鴻蒙Hi3861開(kāi)發(fā)板

2021-10-11 10:07:09

鴻蒙HarmonyOS應(yīng)用

2022-03-15 15:00:59

Hi3861Pin接口鴻蒙

2021-06-25 15:32:13

鴻蒙HarmonyOS應(yīng)用
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)