停车系统监控遥控器放行系统记录案例

举报
神龙居市 发表于 2022/11/29 16:42:09 2022/11/29
【摘要】 问题一般停车场道闸系统是软硬件结合,但是遥控器有对道闸抬杆的第一优先权。也就是说门岗的人员有权利随便放行。如果随便放行,系统如何能记录下来当时的情况呢? 方案我们这里用的这款停车场识别摄像头是有http信息上报功能的,如果把遥控抬杆这一信息编码通过http传到后台就可以完成这一步。 硬件材料遥控开关:和道闸遥控器配对,接收开闸信号,遥控开关设置为电动模式,也就是可以输出一个高低电平一个鸿蒙...

问题

一般停车场道闸系统是软硬件结合,但是遥控器有对道闸抬杆的第一优先权。也就是说门岗的人员有权利随便放行。如果随便放行,系统如何能记录下来当时的情况呢?

方案

我们这里用的这款停车场识别摄像头是有http信息上报功能的,如果把遥控抬杆这一信息编码通过http传到后台就可以完成这一步。
image.png

硬件材料

  • 遥控开关:和道闸遥控器配对,接收开闸信号,遥控开关设置为电动模式,也就是可以输出一个高低电平
  • 一个鸿蒙开发板:一端接遥控开关的输入IO信号,一端接摄像头的485信号端,当收到电平信号变化,则向摄像头发送特定的命令字符串

代码实现

#include <stdio.h>

#include <unistd.h>

#include "cmsis_os2.h"
#include "ohos_init.h"
#include "wifiiot_gpio.h"
#include "wifiiot_gpio_ex.h"
#include "wifiiot_gpio_w800.h"
#include "wifiiot_uart.h"
#include "wifiiot_uart_ex.h"

#define UART_TASK_STACK_SIZE 512
#define UART_TASK_PRIO 25
#define TEST_UART_SIZE 8
#define INIT_BAUD_RATE 9600
#define TEST_BUF_SIZE 2048
#define UART_PORT WIFI_IOT_UART_IDX_0
unsigned char uart1ReadBuff[2048] = {0};
int Signalstate = 0;


static void* UartTask(const char* arg)
{
    (void)arg;

    unsigned int ret;
    int len;
    unsigned char uartWriteBuff_ON[] = "OpenGateOut";

    WifiIotUartAttribute uartAttr;
    uartAttr.baudRate = INIT_BAUD_RATE,
    uartAttr.dataBits = WIFI_IOT_UART_DATA_BIT_8;
    uartAttr.stopBits = WIFI_IOT_UART_STOP_BIT_1;
    uartAttr.parity = WIFI_IOT_UART_PARITY_NONE;
    uartAttr.pad ='M';

    WifiIotUartExtraAttr extraAttr;
    (void)memset_s(&extraAttr, sizeof(WifiIotUartExtraAttr), 0, sizeof(WifiIotUartExtraAttr));
    extraAttr.txFifoLine = WIFI_IOT_FIFO_LINE_ONE_EIGHT;
    extraAttr.rxFifoLine = WIFI_IOT_FIFO_LINE_SEVEN_EIGHTS;
    extraAttr.flowFifoLine = WIFI_IOT_FIFO_LINE_ONE_EIGHT;
    extraAttr.txBlock = WIFI_IOT_UART_BLOCK_STATE_BLOCK;
    extraAttr.rxBlock = WIFI_IOT_UART_BLOCK_STATE_BLOCK;
    extraAttr.txBufSize = TEST_BUF_SIZE;
    extraAttr.rxBufSize = TEST_BUF_SIZE;
    extraAttr.txUseDma = WIFI_IOT_UART_USE_DMA;
    extraAttr.rxUseDma = WIFI_IOT_UART_USE_DMA;

    ret = UartDeinit(UART_PORT);

    ret = UartInit(UART_PORT, &uartAttr, &extraAttr);

    while (1) {
        osDelay(10);
        if(Signalstate == 1){
            len = UartWrite(UART_PORT, uartWriteBuff_ON, sizeof(uartWriteBuff_ON));
            GpioSetOutputVal(WIFI_IOT_GPIO_PB_08, WIFI_IOT_GPIO_VALUE0);
            osDelay(500);
            GpioSetOutputVal(WIFI_IOT_GPIO_PB_08, WIFI_IOT_GPIO_VALUE1);
            Signalstate = 0;
        }
    }

    return NULL;
}


static void RemoteControl_Pressed(char *arg)
{
    (void)arg;

    GpioSetIsrMask(WIFI_IOT_GPIO_PB_01, 0);
    Signalstate = 1;
}
static void UartTaskEntry(void)
{
    osThreadAttr_t attr;

    GpioInit();
    GpioSetDir(WIFI_IOT_GPIO_PB_08, WIFI_IOT_GPIO_DIR_OUTPUT); // output is 0 PB08 control led

   
    GpioSetDir(WIFI_IOT_GPIO_PB_01, WIFI_IOT_GPIO_DIR_INPUT); // input is PB01
    IoSetPull(WIFI_IOT_GPIO_PB_01, WIFI_IOT_GPIO_ATTR_PULLHIGH);
    GpioRegisterIsrFunc(WIFI_IOT_GPIO_PB_01, WIFI_IOT_INT_TYPE_EDGE, WIFI_IOT_GPIO_EDGE_FALL_LEVEL_LOW, RemoteControl_Pressed, NULL);

    attr.name = "UartTask";
    attr.attr_bits = 0U;
    attr.cb_mem = NULL;
    attr.cb_size = 0U;
    attr.stack_mem = NULL;
    attr.stack_size = UART_TASK_STACK_SIZE;
    attr.priority = UART_TASK_PRIO;

    if (osThreadNew((osThreadFunc_t)UartTask, NULL, &attr) == NULL) {
        printf("[Uart Example] Falied to create UartTask!\n");
    }
}

SYS_RUN(UartTaskEntry); // if test add it

摄像头把485信息变成base64字符串,打包后上传服务器,当然还会有设备编号供判定

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。