蓝牙串口模块、初识AT命令、WiFi模块、WiFi模块使用和编程

蓝牙模块

  • 蓝牙模块,又叫做蓝牙串口模块。
  • 串口透传技术:

    透传即透明传送,是指在数据的传输过程中,通过无线的方式这组数据不发生任何形式的改变,仿佛传输过程是透明的一样,同时保证传输的质量,原封不动地到了最终接收者手里。

    以太网,蓝牙,Zigbee, GPRS 等模块玩法一样,对嵌入式程序员来说,不需要关心通讯模块内部数据及协议栈工作原理,只要通过串口编程获得数据即可

    在这里插入图片描述

WiFi模块-ESP-01s

  • 蓝牙,ESP-01s,Zigbee, NB-Iot等通信模块都是基于AT指令的设计
  • AT指令

    AT指令集是从终端设备(Terminal Equipment,TE)或数据终端设备(Data Terminal Equipment,DTE)向终端适配器(Terminal Adapter,TA)或数据电路终端设备(Data Circuit Terminal Equipment,DCE)发送的。

    其对所传输的数据包大小有定义:即对于AT指令的发送,除AT两个字符外,最多可以接收1056个 字符的长度(包括最后的空字符)。

    每个AT命令行中只能包含一条AT指令;对于由终端设备主动向PC端报告的URC指示或response 响应,也要求一行最多有一个,不允许上报的一行中有多条指示或者响应。AT指令以回车作为结尾,响应或上报以回车换行为结尾。

  • 上电后发送AT指令测试通信及模块功能是否正常

    ATOK
    
  • 通过一下命令配置成9600波特率

    AT+UART=9600,8,1,0,0
    
  • 入网设置

    AT+CWMODE=3 //1. 是station(设备)模式 2.是AP(路由)模式 3.是双模OK
    
  • 以设备模式接入家中路由器配置

    AT+CWJAP="WIFI名","WIFI密码"//指令
    WIFI CONNECTED //结果
    WIFI GOT IP //结果
    
  • 查询IP地址

    AT+CIFSR //指令
    +CIFSR:APIP,"192.168.4.1"
    +CIFSR:APMAC,"4e:75:25:0d:ae:2f"
    +CIFSR:STAIP,"192.168.0.148"
    +CIFSR:STAMAC,"4c:75:25:0d:ae:2f"
    OK
    
  • 连接到 TCP server

    1. 开关网络助手,设立TCP服务器

      在这里插入图片描述

    2. 连接服务器

      AT+CIPSTART="TCP","192.168.0.113",8888 //指令,注意双引号逗号都要半角(英文)输入
      CONNECT //结果:成功
      OK //结果:成功
      
    3. 发送数据

      AT+CIPSEND=4 // 设置即将发送数据的长度 (这里是4个字节)
      >CLCA // 看到大于号后,输入消息,CLCA,不要带回车
      Response :SEND OK //结果:成功
      //注意,这种情况下,每次发送前都要先发送AT+CIPSEND=长度 的指令,再发数据!
      
  • 透传

    上一节每次发送数据都要进行字符长度设定,如果设置成透传,就有点像蓝牙模块的玩法

    AT+CIPMODE=1 //开启透传模式
    Response :OK
    AT+CIPSEND //带回车
    Response: >   //这个时候随意发送接收数据咯
    
  • 退出透传模式

    //在透传发送数据过程中,若识别到单独的⼀包数据 “+++”,则退出透传发送
    
  • 代码

    /*
    单片机通过发送AT指令来连接WIFI模块
    */
    #include "reg52.h"
    #include "intrins.h"
    #include "string.h"
    #define SIZE 12
    sfr AUXR = 0x8E;
    sbit D5 = P3^7;
    sbit D6 = P3^6;int Wifi_gotip = 0;
    int At_ok = 0;char buff[SIZE];
    code char Connect_Network[] = "AT+CWJAP=\"YXS1017\",\"yuanxueshe1017\"\r\n";//连接网络
    code char Connect_server[]  = "AT+CIPSTART=\"TCP\",\"192.168.1.58\",8880\r\n";//连接服务器
    char Transparent_mode[] = "AT+CIPMODE=1\r\n";//透传模式
    char Transferring_data[] = "AT+CIPSEND\r\n";//传输数据void Delay1000ms()		//@11.0592MHz
    {unsigned char i, j, k;_nop_();i = 8;j = 1;k = 243;do{do{while (--k);} while (--j);} while (--i);
    }
    void UartInit(void)		//9600bps@11.0592MHz
    {AUXR = 0x01;//提升系统EMI性能PCON = 0x00;//SMOD0 = 0时SCON中的SM0,和SM1一起指定串行口的工作方式SCON = 0x50;//串口工作方式1,且REN=0,允许串口接收TMOD &= 0x0F;TMOD |= 0x20;//定时器1的工作方式8位自动重装TH1 = 0xFD;TL1 = 0xFD;//9600bps的TH1初值TR1 = 1;//启动定时器EA = 1;//开启总中断ES = 1;//开启串口中断
    }
    void send_byte(char data_msg)
    {SBUF = data_msg;while(!TI);TI = 0;
    }
    void send_str(char* data_msg)
    {while(*data_msg != '\0'){send_byte(*data_msg);data_msg++;}
    }
    void main()
    {Delay1000ms();//延时 模块上电D6 = 1;D5 = 1;UartInit();//led和串口初始化send_str(Connect_Network);while(!Wifi_gotip);//接收AT指令的返回值Wifi_gotip = 0;while(!At_ok);//接收AT指令的返回值At_ok = 0;//重复利用OK,将OK标志清零send_str(Connect_server);while(!At_ok);//接收AT指令的返回值At_ok = 0;send_str(Transparent_mode);while(!At_ok);//接收AT指令的返回值At_ok = 0;send_str(Transferring_data);while(1){send_str("to be number one\r\n");//心跳包Delay1000ms();}}void uart_handler() interrupt 4
    {static i = 0;//静态变量char tmp;//判断关键字符if(RI){RI = 0;tmp = SBUF;if(tmp == 'W' || tmp == 'O' || tmp == 'D'){//抓取关键字i = 0;}buff[i] = tmp;i++;//根据白盒测试出,AT指令的返回字,抓取其中的关键字来判断单片机接收到的信息if(buff[0] == 'W' && buff[5] == 'G'){//入网成功的判断依据WIFI GOT IPWifi_gotip = 1;memset(buff,'\0',SIZE);}if(buff[0] == 'O' && buff[1] == 'K'){//连接服务器等OK返回值指令的判断At_ok = 1;memset(buff,'\0',SIZE);}if(buff[0] == 'D' && buff[2] == '5'){//通过串口助手输入D5和D6来控制ledD5 = !D5 ;memset(buff,'\0',SIZE);}if(buff[0] == 'D' && buff[2] == '6'){D6 = !D6; memset(buff,'\0',SIZE);}if(i == 12) i = 0;}if(TI);
    }
    

ESP-01s当服务器

  • USB转TTL插入电脑,TX–RX RX-TX VCC-3.3V GDN-GND

    查询IP地址:AT+CIFSR

    1. 配置成路由模式

      AT+CWMODE=2
      Response :OK
      
    2. 使能多链接

      AT+CIPMUX=1
      Response :OK
      
    3. 建立TCPServer

      AT+CIPSERVER=1 //默认port:333
      Response :OK
      
    4. 发送数据

      AT+CIPSEND=0,4 // 发送4个字节在连接0通道上
      >abcd //输入数据,不带回车
      Response :SEND OK
      //接收数据
      +IPD, 0, n: xxxxxxxxxx //+IPD是固定字符串 0是通道,n是数据长度,xxx是数据
      //断开连接
      AT+CIPCLOSE=0
      Response :0, CLOSED OK
      
  • 代码

    //ESP-01s工作在路由模式,课程查询路由器IP地址192.168.4.1,使用的服务器默认端口号333
    //ESP-01s收到数据D5,D6给上官一号,实现ledD5和ledD6的亮/灭
    #include "reg52.h"
    #include "intrins.h"
    #include "string.h"
    #define SIZE 12
    sfr AUXR = 0x8E;
    sbit D5 = P3^7;
    sbit D6 = P3^6;//int Wifi_gotip = 0;
    int Connect = 0;
    int At_ok = 0;char buff[SIZE];
    char Routing_mode[] = "AT+CWMODE=2\r\n";//设置ESP8266为路由模式
    char Enable_connections[] = "AT+CIPMUX=1\r\n";//使能多连接
    char Establish_TCPserver[] = "AT+CIPSERVER=1\r\n";//建立TCP服务器
    char Send_data[] = "AT+CIPSEND=0,5\r\n";//在0通道上发送5个字节void Delay1000ms()		//@11.0592MHz
    {unsigned char i, j, k;_nop_();i = 8;j = 1;k = 243;do{do{while (--k);} while (--j);} while (--i);
    }
    void UartInit(void)		//9600bps@11.0592MHz
    {AUXR = 0x01;//提升系统EMI性能PCON = 0x00;//SMOD0 = 0时SCON中的SM0,和SM1一起指定串行口的工作方式SCON = 0x50;//串口工作方式1,且REN=0,允许串口接收TMOD &= 0x0F;TMOD |= 0x20;//定时器1的工作方式8位自动重装TH1 = 0xFD;TL1 = 0xFD;//9600bps的TH1初值TR1 = 1;//启动定时器EA = 1;//开启总中断ES = 1;//开启串口中断
    }
    void send_byte(char data_msg)
    {SBUF = data_msg;while(!TI);TI = 0;
    }
    void send_str(char* data_msg)
    {while(*data_msg != '\0'){send_byte(*data_msg);data_msg++;}
    }
    void main()
    {Delay1000ms();//延时 模块上电D6 = 1;D5 = 1;UartInit();//led和串口初始化send_str(Routing_mode);//工作在路由模式while(!At_ok);At_ok = 0;send_str(Enable_connections);//使能多链接while(!At_ok);At_ok = 0;send_str(Establish_TCPserver);//建立TCPServerwhile(!Connect);if(Connect){D5 =0;D6 =0;//如果连接上服务器,D5和D6同时亮}while(1){send_str(Send_data);//发送数据Delay1000ms();Delay1000ms();send_str("HELLO");Delay1000ms();Delay1000ms();}}void uart_handler() interrupt 4
    {static i = 0;//静态变量char tmp;//判断关键字符if(RI){RI = 0;tmp = SBUF;if(tmp == '0' || tmp == 'O' || tmp == ':'){i = 0;}buff[i] = tmp;i++;if(buff[0] == '0' && buff[2] == 'C'){//连接网络判断0,CONNECTConnect = 1;memset(buff,'\0',SIZE);}if(buff[0] == 'O' && buff[1] == 'K'){//连接服务器等OK返回值指令的判断At_ok = 1;memset(buff,'\0',SIZE);}if(buff[0] == ':' && buff[2] == '5'){//灯控指令,判断":D5"和":D6"D5 = !D5 ;memset(buff,'\0',SIZE);}if(buff[0] == ':' && buff[2] == '6'){D6 = !D6; memset(buff,'\0',SIZE);}if(i == 12) i = 0;}if(TI);
    }
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/588455.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

166.乐理基础-五声性调式、宫商角徵羽

如果到这五线谱还没记住还不认识的话去看102.五线谱-高音谱号与103.五线谱-低音谱号这两个里,这里面有五线谱对应的音名,对比着看 如果不认识调号去看112.五线谱的调号(一)、113.五线谱的调号(二)、114.快…

让很多人直呼“要失业”的到底是什么?--AIGC

当下,全球科技圈的焦点汇聚AI,ChatGPT还是Midjourney等生成式AI工具,于是在这些生成式AI工具的助推下,诞生了新的人工智能产业方向:AIGC(AI Generated Content)。 一、AIGC是什么? …

数据库加载驱动问题(java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver)

java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver 遇到此问题,首先检查IDEA外部库中是否有mysql数据库驱动。如下所示: 如果发现外部库中存有mysql数据库驱动,需要在数据库配置文件中查看是否设置有时区mysql8.0以上版本需要设…

智能视频翻译和配音处理工具:Pyvideotrans

pyVideoTrans:一键字幕识别翻译配音带新语言字幕和配音的视频 - 精选真开源,释放新价值。 概览 Pyvideotrans是一款卓著的智能化视频处理系统,专精于视频翻译与配音艺术,以其卓越的技术实力实现对原始视频中音频信息的精准捕捉、…

HWOD:自守数

一、知识点 break只会结束最里面的一层循环 int型数按位比较的时候,可以直接求余比较,无需转换为char型数组后再按下标比较 二、题目 1、描述 自守数是指一个数的平方的尾数等于该数自身的自然数。例如:25^2 625,76^2 5776…

一个页面实现两个滚动条【前端】

一个页面实现两个滚动条【前端】 前言版权推荐一个页面实现两个滚动条最后 前言 2024-4-2 12:54:46 以下内容源自《【前端】》 仅供学习交流使用 版权 禁止其他平台发布时删除以下此话 本文首次发布于CSDN平台 作者是CSDN日星月云 博客主页是https://jsss-1.blog.csdn.net …

AJAX —— 学习(二)

目录 一、利用 JSON 字符串 返回数据 (一)基础代码 (二)原理及实现 二、nodmon 工具 自动重启服务 (一)用途 (二)下载 (三)使用 三、IE 缓存问题 &a…

Paragon NTFS for Mac15直装版2024最新安装包下载

Paragon NTFS for Mac 是一款专为 Mac 用户设计的软件,它解决了 Mac 系统无法直接读写 NTFS 格式硬盘的问题。通过安装这款软件,Mac 用户可以像使用本机磁盘一样,轻松地在 NTFS 格式的硬盘、U 盘等存储设备上读写文件,无需进行任何…

数字化服务升级:数字乡村改善农民生活质量

随着信息技术的迅猛发展,数字化浪潮已经深入社会的各个角落,为人们的生活带来了翻天覆地的变化。在乡村地区,数字化服务的升级正在逐步改变农民的生活方式,提高他们的生活质量。本文将围绕数字化服务升级,探讨数字乡村…

使用RANSAC拟合二维直线

二维直线的拟合 1、OpenCV实现2、RANSAC二维直线拟合实现 1、OpenCV实现 使用OpenCV实现二维直线的拟合&#xff1a; #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" #include <iostream> using namespace cv; u…

【面试HOT200】数组篇

系列综述&#xff1a; &#x1f49e;目的&#xff1a;本系列是个人整理为了秋招面试coding部分的&#xff0c;整理期间苛求每个算法题目&#xff0c;平衡可读性与代码性能&#xff08;leetcode运行复杂度均打败80%以上&#xff09;。 &#x1f970;来源&#xff1a;材料主要源于…

MySQL高可用MHA

一、MHA概述 1.1 什么是 MHA MHA&#xff08;MasterHigh Availability&#xff09;是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点故障的问题。 MySQL故障切换过程中&#xff0c;MHA能做到0-30秒内自动完成故障切换操作。 MHA能在…