一、引脚配置
引脚 | 含义 | 有效值 |
---|---|---|
A7 | 蜂鸣器 | 低电平点亮 |
C13 | LED | 低电平点亮 |
B7 B8 | OLED | SCL SDA |
A2 A3 | Air868 | 串口2 |
A9 A10 | 打印信息 | 串口1 |
B10 B11 | esp8266 | 串口3 |
B0 B1 | 按键 | 低电平有效 |
二、功能
1、开机启动,显示学生姓名,学号,联系方式,连接wifi(可跳过),使用air868判断当前经纬度, led闪烁一下, 蜂鸣器响一次
2、系统启动后,每隔3秒查询一下当前位置是否超出设定范围, led闪烁一次, 查询是否wifi已经连接;
3、当该装置被移动时,LED常亮, 蜂鸣器长鸣
三、实现
3.1、 开机显示OLED, IIC通信, 设置 OLED096_display_init()函数
3.2、 实现wifi判断是否连接, 模式使用STA, 开机就开始连接wifi, 可以使用手机开热点,但是提前在程序中设置好参数 wifista_ssid和wifista_password
3.3、完成3.2wifi连接之后,初始化Air868, 进行12次获取当前位置,去掉最大值和最小值,其他取平均值, 系统初始化完毕
3.4、每隔3s查询一下Air868和wifi连接情况。
四、硬件
- AD绘图
- STM32最小系统、OLED模块、Air868模块、两个按键、一个蜂鸣器、esp8266模块(注意:将A9 A10引脚引出,蜂鸣器使用3.3v驱动,Air868的VCC接5v,转3.3接STM32, 系统完成后,只需要连接usb接Air868供电,就能给整个系统供电了。)
重要代码
- 串口2 air868模块, 命令回显
void USART2_IRQHandler(void) //串口2中断服务程序
{
u8 Res;
/////////////////////////////////////////////////////////////
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾)
{
Res =USART_ReceiveData(USART2); //读取接收到的数据
if((USART2_RX_STA&0x8000)==0)//接收未完成
{
if(USART2_RX_STA&0x4000)//接收到了0x0d
{
if(Res!=0x0a)USART2_RX_STA=0;//接收错误,重新开始
else {
printf("%s**\r\n",USART2_RX_BUF);
USART2_RX_STA|=0x8000; //接收完成了
memset(USART2_RX_BUF,0,sizeof(USART2_RX_BUF));//清除buffer
USART2_RX_STA=0;
}
}
else //还没收到0X0D
{
if(Res==0x0d)USART2_RX_STA|=0x4000;
else
{
USART2_RX_BUF[USART2_RX_STA&0X3FFF]=Res ;
USART2_RX_STA++;
if(USART2_RX_STA>(USART2_REC_LEN-1))USART2_RX_STA=0;//接收数据错误,重新开始接收
}
}
}
}
}