基于wifi摄像头与单片机的串口透传及二次开发

1.硬件说明

1.实物图片

这是在淘宝花了137买的wifi透传摄像头,拆开外壳我发现里面是esp32的摄像模块改版,现在主要对其进行二次开发

2.总线通讯

摄像头的背后有两个总线接口,若要与其进行通讯,需要配备摄像头配套的Zlink模块和wifi摄像头模块进行总线通信,再由Zlink模块转出TTL,接到单片机与单片机通讯

其实Zlink模块连接的本质还是TTL,将跳线帽接至规定位置后,就可以与单片机进行通讯

2.使用说明

1.手机连接

给 wifi 摄像头模块供电,然后 wifi 摄像头模块会发出热点,热点名称为 众灵机器 人_XXXX,密码是 zhonglingkeji

连接上热点以后,打开浏览器搜索192.168.4.1,就可以进入控制网页

按下屏幕两边的按键可以通过串口发出一串指令

2.模块配置

若模块未插入TF卡,只能按其默认文件进行配置

【0 号正】:按下时发送的指令为#000P1000T2000!,松开时发送的指令为#255PDST!

【1 号正】:按下时发送的指令为#001P1000T2000!,松开时发送的指令为#255PDST!

【2 号正】:按下时发送的指令为#002P1000T2000!,松开时发送的指令为#255PDST!

【3 号正】:按下时发送的指令为#003P1000T2000!,松开时发送的指令为#255PDST!

【4 号正】:按下时发送的指令为#004P1000T2000!,松开时发送的指令为#255PDST!

【5 号正】:按下时发送的指令为#005P1000T2000!,松开时发送的指令为#255PDST!

【6 号正】:按下时发送的指令为#006P1000T2000!,松开时发送的指令为#255PDST!

【7 号正】:按下时发送的指令为#007P1000T2000!,松开时发送的指令为#255PDST!

【左上】:按下时发送的指令为DCR:600,600!,松开时发送的指令为DCR:0,0!

【左下】:按下时发送的指令为DCR:-600,-600!,松开时发送的指令为DCR:0,0!

【左左】:按下时发送的指令为DCR:-600,600!,松开时发送的指令为DCR:0,0!

【左右】:按下时发送的指令为DCR:600,-600!,松开时发送的指令为DCR:0,0!

【左中】:按下时发送的指令为DCR:0,0!,松开时发送的指令为DCR:0,0!

【右上】:按下时发送的指令为DCR:900,900!,松开时发送的指令为DCR:0,0!

【右下】:按下时发送的指令为DCR:-900,-900!,松开时发送的指令为DCR:0,0!

【右左】:按下时发送的指令为DCR:-900,900!,松开时发送的指令为DCR:0,0!

等等

当使用了TF卡时,可以通过更改TF卡内部的配置文件来进行调整

可以通过更改配置文件进行配置同时也可以更改按钮的名称

3.二次开发

1.电源电路

问了客服这个Zlink模块的供电要求,客服的答案是7.4v-8.4v最好,这个电压值比较偏,现成的芯片不能直接使用,但是我也需要集成在一块电路板上,采用12v对我的产品供电,除去12-5v共给单片机以外,任需要额外设计12-8v的DC-DC降压电路

XL4015的降压电路,可以实现大电流的降压,正好满足了wifi摄像头的启动大电流,电路原价也比较常见

XL4015的稳压公式: VOUT=1.25*(1+R6/R7)

我这里需要一个8v的输出,所以我选用了这两个阻值的电阻,这里也可以自己计算,得出一个想要的阻值,或者采用滑动变阻器,若使用滑动变阻器需要先调试滑动变阻器阻值,防止损坏后级电路,电阻尽量采用紧密电阻减小误差

2.文件配置

通过串口软件测试,我发现,摄像头是以文本的形式将数据发送给我的单片机,所以在程序里还需要额外的改动

这里我只需要用两边各4个按钮,所以我只对需要用的按钮进行了处理,这里配置需要注意,发送的指令格式必须以#开头,以^结尾,中间的数字留给我的程序进行判断

3.串口程序

梳理完成了摄像头模块的使用与注意事项后,简单测试一下就可以进行单片机程序的编程了

复制代码
void InitUart()//115200 波特率
{
	PCON &= 0x7F;		//波特率不倍速
	SCON = 0x50;		//8位数据,可变波特率
	AUXR |= 0x04;		//定时器时钟1T模式
	BRT = 0xFD;			//设置定时重载值
	AUXR |= 0x01;		//串口1使用独立波特率发射器为波特率发生器
	AUXR |= 0x10;		//启动独立波特率发射器
	ES = 1;				//使能串口1中断
}

/*--------------------------------------
        串口一 发送一个字符
--------------------------------------*/

void  uart1_txd(unsigned char x)
{
	SBUF = x;
}

我这里用的是stc12单片机,先对串口进行配置,注意这里还需要开启总中断

复制代码
void uart0_interrupt(void) interrupt 4 
{
	  if(RI==1) 
  { 
		xiaodu[num]=SBUF;                     //数据包接收		
	

		
		if(num >= 1){num++;}
		if(num==0&&xiaodu[num]==0x23){num=1;}	//当接收的第一个字符为0xaa时才接收第二位字符
		else if(num==0&&xiaodu[num]!=0x23){num=0;memset(xiaodu, 0, sizeof(xiaodu));}
		else if(num==1&&xiaodu[num]==0x39){num=0;memset(xiaodu, 0, sizeof(xiaodu));while(xiaodu[1]);}
		if(num>=6){num=0;}
		RI=0;
		
		
		
	}
	
}

这是串口接收的程序,文件里指令配置的要求刚好作为我的标志位,当识别到第一位#时,才会继续读取下面的数据,不然就丢掉,#9^作为我的松手指令当识别到的时候也会丢掉,通过串口的收发,我发现文本的数字在16进制下也有规律,都是0x3+文本数字,也就是说,我只需要识别标志位后面的数字就可以完成判断

复制代码
if(xiaodu[1] == 0x35){dw = 1;}
				if(xiaodu[1] == 0x36){dw = 0;}
				if(dw == 1&&zd != 2){zd=1;}
				if(zd == 1){rgb = 0;delay_ms(500);rgb = 1;zd = 2;}
				if(dw == 0 && zd == 2){rgb = 0;delay_ms(2000);rgb = 1;zd = 0;}
				if(xiaodu[1] == 0x31){colour++;colour%=9;rgb = 0;delay_ms(1000);rgb = 1;}
				if(xiaodu[1] == 0x32){while(xiaodu[1] == 0x32);djjs++;djjs%=2;}//舵机状态转换
				if(djjs == 0){pwm = 5;OLED_ShowChinese(34,6,29,16);}
				else{pwm = 17;OLED_ShowChinese(34,6,28,16);}
				if(xiaodu[1] == 0x30){rgb = 0;delay_ms(2000);rgb = 1;colour=0;}

这是我的条件配置程序

4.最终成品

这就是我的项目产品,自动灭蚊装置,可以通过操控控制盒上的按键进行操控,也可以通过,wifi摄像头模块对其进行操控

注:本文为学习项目过程记录,仅供参考,欢迎大家指正讨论

相关推荐
三佛科技-134163842123 小时前
迷你加湿器方案开发,加湿器/香薰机MCU控制方案开发设计
单片机·嵌入式硬件·智能家居·pcb工艺
hazy1k3 小时前
51单片机基础-矩阵按键
嵌入式硬件·矩阵·51单片机
一支闲人4 小时前
带你了解STM32:SPI通信(硬件部分)
stm32·单片机·嵌入式硬件·基础知识
我先去打把游戏先7 小时前
VSCode通过SSH连接到Ubuntu虚拟机失败“找不到ssh安装”问题解决
笔记·vscode·单片机·嵌入式硬件·学习·ubuntu·ssh
学工科的皮皮志^_^9 小时前
电压源和电流源学习理解
单片机·嵌入式硬件·学习
linweidong11 小时前
跨平台驱动开发:打造兼容多款MCU的硬核方案
驱动开发·单片机·嵌入式硬件·bsp·rtos·spi驱动·hal设计
易享电子11 小时前
基于单片机大棚浇水灌溉控制系统Proteus仿真(含全部资料)
单片机·嵌入式硬件·fpga开发·51单片机·proteus
星辰pid14 小时前
STM32基于can总线通信控制多个舵机/电机原理及代码
stm32·单片机·嵌入式硬件
武文斌7714 小时前
项目学习总结:CAN总线、摄像头、STM32概述
linux·arm开发·stm32·单片机·嵌入式硬件·学习·c#