找回密码
 立即注册
123
返回列表 发新帖回复
楼主: xiejirui666

我司BQ3568-HM开发板与3861开发板实现TCP通讯

[复制链接]

3

主题

28

帖子

84

积分

注册会员

Rank: 2

积分
84
 楼主| 发表于 2023-8-4 16:48:22 | 显示全部楼层
今日任务:继续实现人体感应功能。请教陈大佬,教我多线程方法,实现了具体功能。
1.需要新建线程:
static void ExampleEntry(void)
{
        evt_id2 = osEventFlagsNew(NULL);
        if (evt_id2 == NULL)
        {
                printf("Falied to create EventFlags!\n");
        }
        osThreadAttr_t attr;

        attr.name = "Example_Task";
        attr.attr_bits = 0U;
        attr.cb_mem = NULL;
        attr.cb_size = 0U;
        attr.stack_mem = NULL;
        attr.stack_size = TASK_STACK_SIZE;
        attr.priority = TASK_PRIO;

        if (osThreadNew((osThreadFunc_t)Example_Task, NULL, &attr) == NULL)
        {
                printf("Falied to create Example_Task!\n");
        }
}
(注意:要定义在入口线程前)
2.在入口线程末端加入本线程入口ExampleEntry()
3.本线程会执行Example_Task,此处就是传感器代码:
static void Example_Task(void)
{
        // E53_IS1_Init();
        // E53_IS1_Read_Data(Beep_Alarm);

        while (1)
        {
                osEventFlagsWait(evt_id2, FLAGS_MSK1, osFlagsWaitAny, osWaitForever);
                Beep_StatusSet(ON);
                char data1[10] = "true";
                send(new_fd, data1, strlen(data1), 0);
                bzero(recvbuf, sizeof(recvbuf));
                GpioSetOutputVal(WIFI_IOT_GPIO_IDX_2, 1);
                osDelay(200);
                Beep_StatusSet(OFF);
                GpioSetOutputVal(WIFI_IOT_GPIO_IDX_2, 0);
        }
}
4:此线程会等待阻塞,等待设备端发送信号打开传感器,并监听物体靠近,标志位FLAGS_MSK1变化后执行之后函数。
osEventFlagsWait(evt_id2, FLAGS_MSK1, osFlagsWaitAny, osWaitForever);
5:所以主线程tcp发送消息,标志位会随物体靠近变化,主线程判断与相应语句:
                        if (strcmp(recvbuf, "rentiganyingon") == 0)
                        {

                                E53_IS1_Init();
                                E53_IS1_Read_Data(Beep_Alarm);
                        }
6:有物体靠近时发送true消息,前端利用消息判断并改变UI状态
回复

使用道具 举报

3

主题

28

帖子

84

积分

注册会员

Rank: 2

积分
84
 楼主| 发表于 2023-8-4 17:13:18 | 显示全部楼层
BQ3568前端实现报警代码如下,点击开启后,有人靠近会报警,记录靠近次数,靠近会有图片与文字同步变化:
  1. import router from '@ohos.router'
  2. import promptAction from '@ohos.promptAction'
  3. @Component
  4. struct PageTitle {
  5.   build() {
  6.     Row() {
  7.       Image($r('app.media.back'))
  8.         .width(20)
  9.         .height(20)
  10.         .onClick(() => {
  11.           router.back()
  12.         })
  13.       Text("人体感应")
  14.         .fontSize(22)
  15.         .margin({ left: 20 })
  16.     }
  17.     .padding(12)
  18.     .width('100%')
  19.   }
  20. }



  21. @Component
  22. struct oneTable {
  23.   @State message: string = ''
  24.   @State imageBgColorA: number = 0
  25.   @StorageProp('currentBreakpoint') currentBreakpoint: string = 'sm'
  26.   @State jingbao: number = 0
  27.   @State cishu: number = 0
  28.   private timer: number = 0
  29.   @Builder IngredientItem() {



  30.     Stack({ alignContent: Alignment.BottomStart }) {

  31.       Image(this.jingbao  ? $r("app.media.ren_youren") : $r("app.media.ren_wuren0"))
  32.         .backgroundColor(`rgba(255, 255, 255, ${this.imageBgColorA})`)
  33.         .objectFit(ImageFit.Contain)
  34.       Text(this.jingbao ? "有人靠近" :"无人靠近" )
  35.         .align(Alignment.Center).width('50%').fontSize(25).height('10%')

  36.     }
  37.     .height(this.currentBreakpoint == 'lg' ? 166 : 280)
  38.     Column() {
  39.       Flex({ direction: FlexDirection.Column, justifyContent: FlexAlign.Center }) {
  40.         Column() {
  41.           Row() {

  42.             Text("人体感应")
  43.               .fontSize(18)
  44.               .fontWeight(FontWeight.Bold)
  45.               .layoutWeight(1)
  46.               .align(Alignment.Start)
  47.             Row() {
  48.               Button('开', { type: ButtonType.Normal, stateEffect: true })
  49.                 .borderRadius(8)
  50.                 .backgroundColor(0x317aff)
  51.                 .width(90)
  52.                 .onClick(() => {
  53.                   promptAction.showToast({
  54.                     message: '人体感应已打开',
  55.                     duration: 1500
  56.                   });

  57.                   globalThis.tcp.connect({ address: globalThis.mixeraddr , timeout: 6000 }, () => {
  58.                     //     电脑ip
  59.                     //     tcp.connect({ address: { address: '192.168.2.125', port: 3861, family: 1 }, timeout: 6000 }, () => {
  60.                     console.log('connect success');
  61.                     globalThis.tcp.send({
  62.                       data: 'rentiganyingon'
  63.                       //此处省略encoding, 默认为utf-8编码格式
  64.                     }, err => {
  65.                       if (err) {
  66.                         console.log('send fail' + JSON.stringify(err));
  67.                         return;
  68.                       }
  69.                       console.log('send success');
  70.                     })
  71.                   })

  72.                   globalThis.tcp.on('message', value => {
  73.                     console.log("on message")
  74.                     let buffer = value.message
  75.                     let dataView = new DataView(buffer)
  76.                     let str = ""
  77. /*                    clearInterval(this.timer)
  78.                     this.timer = setTimeout(() => {

  79.                     }, 500)*/
  80.                     for (let i = 0; i < dataView.byteLength; ++i) {
  81.                       str += String.fromCharCode(dataView.getUint8(i))
  82.                     }
  83.                     console.log("on connect received:" + str)
  84.                     if(Boolean(str)){
  85.                       this.cishu ++;
  86.                       this.jingbao = 1;
  87.                       clearInterval(this.timer)
  88.                       this.timer = setTimeout(() => {
  89.                         this.jingbao = 0
  90.                       }, 2000)
  91.                     }
  92.                       //                    else{

  93. //                    }

  94.                   });



  95.                 })
  96.               Blank()
  97.               Button('关', { type: ButtonType.Normal, stateEffect: true })
  98.                 .borderRadius(8)
  99.                 .backgroundColor(0x317aff)
  100.                 .width(90)
  101.                 .onClick(() => {

  102.                   promptAction.showToast({
  103.                     message: '人体感应已关闭',
  104.                     duration: 1500
  105.                   });
  106.                   globalThis.tcp.connect({ address: globalThis.mixeraddr , timeout: 6000 }, () => {
  107.                     //     电脑ip
  108.                     //     tcp.connect({ address: { address: '192.168.2.125', port: 3861, family: 1 }, timeout: 6000 }, () => {
  109.                     console.log('connect success');
  110.                     globalThis.tcp.send({
  111.                       data: 'rentiganyingoff'
  112.                       //此处省略encoding, 默认为utf-8编码格式
  113.                     }, err => {
  114.                       if (err) {
  115.                         console.log('send fail' + JSON.stringify(err));
  116.                         return;
  117.                       }
  118.                       console.log('send success');
  119.                     })
  120.                   })
  121.                 })
  122.             }
  123.             .width('100%')
  124.             .layoutWeight(2)
  125.           }
  126.           .padding(20)
  127.           .margin({ bottom: 20 })

  128.           Row(){
  129.             Text('报警日志:')
  130.               .align(Alignment.Center)
  131.             .width('40%')
  132.             Text(this.cishu.toString()+"次")
  133.               .width('40%').align(Alignment.Center)

  134.           }

  135.         }

  136.       }

  137.     }.height('50%')
  138.     .backgroundColor(Color.White)

  139.   }

  140.   build() {

  141.     Column() {
  142.       this.IngredientItem()
  143.     }
  144.   }
  145. }


  146. @Entry
  147. @Component
  148. struct fengshan {
  149.   build() {
  150.     Scroll() {
  151.       Column() {
  152.         PageTitle()
  153.         Swiper() {
  154.           oneTable()
  155.         }
  156.         .clip(new Rect().width('100%').height('100%').radiusWidth(15).radiusHeight(15))
  157.         .itemSpace(20)
  158.         .height(630)
  159.         .indicatorStyle({ selectedColor: Color.Green })
  160.         .margin({ top: 10, right: 10, left: 10 })

  161.       }
  162.       .alignItems(HorizontalAlign.Center)
  163.     }
  164.     .backgroundColor('#EDF2F5')
  165.     .height('100%')
  166.     .align(Alignment.Top)
  167.   }
  168. }









复制代码
回复

使用道具 举报

3

主题

28

帖子

84

积分

注册会员

Rank: 2

积分
84
 楼主| 发表于 2023-8-4 17:17:50 | 显示全部楼层
学习线程连续打印:
  1. void thread1(void)
  2. {
  3.     int sum=0;
  4.     while (1)
  5.     {
  6.         /* code */
  7.         printf("This is BearPi-HM_Nano Thread1----%d\r\n",sum++);
  8.         usleep(1000000);
  9.     }
  10. }

  11. void thread2(void)
  12. {
  13.     int sum=0;
  14.     while (1)
  15.     {
  16.         /* code */
  17.         printf("This is BearPi-HM_Nano Thread2----%d\r\n",sum++);
  18.         usleep(500000);
  19.     }   
  20. }

  21. static void Thread_example(void)
  22. {
  23.     osThreadAttr_t attr;

  24.     attr.name = "thread1";
  25.     attr.attr_bits = 0U;
  26.     attr.cb_mem = NULL;
  27.     attr.cb_size = 0U;
  28.     attr.stack_mem = NULL;
  29.     attr.stack_size = 1024*4;
  30.     attr.priority = 25;

  31.     if (osThreadNew((osThreadFunc_t)thread1, NULL, &attr) == NULL) {
  32.         printf("Falied to create thread1!\n");
  33.     }

  34.     attr.name = "thread2";
  35.    
  36.     if (osThreadNew((osThreadFunc_t)thread2, NULL, &attr) == NULL) {
  37.         printf("Falied to create thread2!\n");
  38.     }
  39. }
复制代码

回复

使用道具 举报

123
返回列表 发新帖 回复
高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则