基于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摄像头模块对其进行操控

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

相关推荐
bai5459364 小时前
STM32 PWM驱动LED呼吸灯
stm32·单片机·嵌入式硬件
郝学胜-神的一滴4 小时前
Linux命名管道:创建与原理详解
linux·运维·服务器·开发语言·c++·程序人生·个人开发
智者知已应修善业4 小时前
【51单片机普通延时奇偶灯切换】2023-4-4
c语言·经验分享·笔记·嵌入式硬件·51单片机
btzhy10 小时前
STM32单片机:基本定时器应用:单脉冲模式(STM32L4xx)
stm32·单片机·嵌入式硬件·基本定时器应用:单脉冲模式
文sir.11 小时前
温湿度采集系统(stm32+mqtt+Onenet云平台+esp8266)
stm32·单片机·嵌入式硬件·mqtt·onenet·云平台·esp8266
DIY机器人工房11 小时前
嵌入式面试题:你有没有用过直接基于TCP协议,不借助HTTP、MQTT这类上层协议的项目经历?
stm32·单片机·嵌入式硬件·面试题·diy机器人工房
zhmc13 小时前
Cortex M0单片机指令执行周期
单片机·嵌入式硬件
NEU-UUN15 小时前
5.1.STM32-EXTI外部中断——全程手敲板书
stm32·单片机·嵌入式硬件
TangDuoduo000516 小时前
【常见传感器原理及应用】
单片机·嵌入式硬件
q***06471 天前
SocketTool、串口调试助手、MQTT中间件基础
单片机·嵌入式硬件·中间件