2系统软件设计
2.1 STM32控制程序设计
2.1.1程序流程图
2.1.2 系统初始化
void hardware_init(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
delay_init(); //延时函数初始化
uart_init(115200); //串口初始化为115200
Usart2_Init(115200); //串口2,驱动ESP8266用
while(DHT11_Init()) //DHT11初始化
{
printf( "DTH11 error!\r\n");
delay_ms(200);
}
relay_init();//继电器初始化
ESP8266_Init(); //初始化ESP8266
UsartPrintf(USART_DEBUG, " Hardware init OK\r\n");
}
STM32控制单元主要使用的是DTH11温湿度传感器、ESP8266模块以及继电器模块的,系统的初始化就是要完成对这些器件所使用的IO以及系统时钟等进行配置。
2.1.3 温湿度采集
下述程序是进行对温湿度传感器所测得的数据的读取。发型传感器的“DATA”引脚是用于于微处理器与 DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右,数据分小数部分和整数部分,具体格式在下面说明,当前小数部分用于以后扩展,现读出为零.操作流程如下:一次完整的数据传输为40bit,高位先出。数据格式:8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据+8bit校验和。
//从DHT11读取一次数据
//temp:温度值(范围:0~50°)
//humi:湿度值(范围:20%~90%)
//返回值:0,正常;1,读取失败
u8 DHT11_Read_Data(u8 *temp,u8 *humi)
{
u8 buf[5];
u8 i;
DHT11_Rst();
if(DHT11_Check()==0)
{
for(i=0;i<5;i++)//读取40位数据
{
buf[i]=DHT11_Read_Byte();
}
if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
{
*humi=buf[0];
*temp=buf[2];
}
}else return 1;
return 0;
}
2.1.4 继电器控制
继电器的控制是相对较简单的,仅需要对相关控制引脚进行初始化之后,对引脚输出高低电平进行对继电器的控制。
void relay_init(void)
{
GPIO_InitTypeDef
GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void relay_on(void)
{
GPIO_SetBits(GPIOB,GPIO_Pin_9);
}
void relay_off(void)
{
GPIO_ResetBits(GPIOB,GPIO_Pin_9);
}
2.2 树莓派单元设计
2.2.1 Linux操作系统
该树莓派平台所运行的是Linux系统的一个名为“RASPBIAN”的发行版本。Raspbian是一个基于Debian的自由操作系统,硬件驱动程序亦根据树莓派的硬件而优化,软件包方面提供了超过35,0000个套件,当中这些软件亦针对树莓派进行了不同程度的优化,目的是为树莓派打造一个稳定和快速的系统平台。
Raspbian目前是树莓派官方适配的系统之一。
2.2.2 基本环境的搭建
搭建基于树莓派的基本开发环境,首先需要进行的是对树莓派进行相关系统镜像的烧录。烧写树莓派镜像一般是使用SD/TF卡其,基本步骤如下。
1)使用SD卡格式化工具(SD Formatter)将要进行烧录的SD/TF卡先进行格式化
2)将SD/TF卡格式化完成之后就可以进行树莓派系统镜像的烧录了。烧录树莓派的系统镜像使用烧录系统工具(Win32 Disk Imager),选择镜像文件所在的路径,之后点击write便可以进行系统的烧录。
系统烧录完毕之后重新上电进入系统,安装好基本的应用程序,如串口助手工具“minicom”,编辑器工具“nano”等。
2.2.3 网卡的配置
树莓派虽然已经内置有有线网卡,但是其且并没有配置无线网卡,所以在树莓派使用该USB无线网卡进行数据的交互前,需要先对树莓派系统进行相关网卡的配置。树莓派的Raspbian已经支持USB无线网卡的使用,所以只需要进行先关配置文件的修改。
1)查看系统是否已经识别和加载了该USB无线网卡设备。
2)修改目录/etc/network/interfaces中的“interfaces”,文件。
3)修改/etc/wpa_supplicant/wpa_supplicant.conf文件,添加修改WiFi接入点名称SSID和WiFi接入密码。
2.2.4 mjpg-streamer的编译和安装
mipg-streamer是一款免费基于IP地址的视频流服务器,它的输入插件从摄像头读取视频数据,这个输入插件产生视频数据并将视频数据复制到内存中,它有多个输出插件将这些视频数据经过处理,其中最重要的输出插件是网站服务器插件,它将视频数据传送到用户浏览器或其他浏览设备中,mipg-streamer的工作就是将其中的一个输入插件和多个输出插件绑定在一起,所有的工作都是通过它的各个插件完成的。
安装该应用程序需要下载其源码进行编译,编译完成之后才能进行安装。安装后执行sudo mjpg_streamer -i “./input_uvc.so -r 640x480 -f 10 -n” -o "./output_http.so -p 8080 -w /usr/local/www"命令之后在命令窗口打印出以下字符:
即成功安装了mipg-streamer视频流服务器,在浏览器中输入本地的IP地址加上端口号“8080”,即可进行相关图片视频数据的查看。
2.2.5 相关脚本的制作
该树莓派监控单元是用于实时地进行视频监控,这就要求在该设备无故关机,或者是因停电等其他外部因素造成了树莓派主系统进入关机状态,待系统重启之后不需要再使用相关开发环境对其进行重新的启动相关监控和数据上传服务等的开启,如此一来就需要,在再次上电开机之后,系统能自启相关服务程序,为此需要编写相关的服务应用的开机自启脚本。
在linux操作系统中,要想达到开机自启服务应用程序或者是执行相关命令是方法有许多方式,本次所采取的的方法是在系统根目录下的/etc/init.d路径下建立应用启动脚本。编写的脚本如下图所示:
在建立了开机自启服务应用的脚本之后,还需要对其进行权限的添加。默认更改该文件的权限为“777”。
sudo chmod 777 /etc/init.d/webcam
在linux操作系统中,每一个文件和目录都有其访问权限,这些访问权限就决定了,谁能查看、读写该文件或者是目录。如“777 rwx|rwx|rwx”,前三个为属主名,即该文件或目录的创建者或是被指定的文件的所属者;中间三个是文件的所属组,在该分组内的非文件或目录的属主用户对给文件所拥有的权限;最后三位是属于other用户,该类型用户既不属于属主也不属于属组的用户。其中r表示读权限、w表示写权限、x表示执行权限。通过将该启动脚本文件的权限值为“777”,即所有用户都可以对该文件进行读写以及执行的操作。以此为了避免由于文件的权限问题所导致的系统的启动故障。
编写好改启动脚本之后,将该脚本文件添加到开机自启即可实现该应用的开机自启。