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