定位项目说明

一、引脚配置

引脚 含义 有效值
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;//接收数据错误,重新开始接收   
                }        
            }
        }            
     } 
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容