极客C -项目教程 C/C++|MCU|软件|物联网|嵌入式|Linux|辅助设计|飞行器
Posted 极客C
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了极客C -项目教程 C/C++|MCU|软件|物联网|嵌入式|Linux|辅助设计|飞行器相关的知识,希望对你有一定的参考价值。
思维导图文章末附录,这里主要是项目体系,具体内容分篇章讲解。
个人网站
-
一边做教程,一边写总结,自己实力不算多高,只是喜欢学习记录。也是最近才想弄的,通过梳理知识体系,整理项目,总结知识点,还有网站设计,封面设计,文档撰写,工具使用等,让我收获良多,也让我明白知识不易学,教程更难做。
-
本来想把书写完的,太多了,短时间弄不完,只能假期再认真写了。花了很多时间和精力,也想缓一缓,后续就是定期写写文章,完善网站内容,慢慢把书写完。
-
对于大学之道,只能说雄关漫道真如铁,而今迈步从头越,不会则学,何惧之有。
绪论
教程说明
因为模块太多,全部放在一起有些冗杂,所以每一个部分都有单独的文件,也为了能更好的描述,切换画布或者点击链接跳转就可以查看
应该加强核心的知识,并且学会融合进入其他的项目当中,举一反三。比如可以利用单片机与显示屏生成显示二维码,学生管理系统连接到数据库操作,五子棋实现人机对战等等。简单的逻辑实现比较简单,但是多元化的融合需要有较深的理解。
以简入繁,以剑破点,每一个知识点都要直击核心,抓住重点。每个人精力都有限,我希望用更短的时间做更高效的事。
培养方案
项目主要以实践为主,会写文章,做视频进行教学,刨析内部的每一个知识细节,通过一个项目,能掌握一个体系的知识。不过视频暂时做不了,因为没时间
教程总结
由于时间有限,个人水平有限,教程的内容叙述较浅,因为知识面较广,每一部分想要深入都需要大量的时间,想要真的掌握需要时间的沉淀。不过入门过后就能按照自己的需求去深入学习,网上有很多较好的开源资料,几乎想学什么都会有,所以找资源也是一个非常重要的技能。
项目在于精,而不在于多,从简单的实现到不断拓展精炼,从而实现更实用,更完善的项目。知识面广有助于思维的扩散,但是专精某一方向,才能在领域中有立足之地。
不积跬步无以至千里
语言篇
C语言基础
简单程序
注意点
头文件
主函数
注释
输入输出
数据类型
整型
浮点型
字符类型
数组
结构体
联合
枚举
指针
运算符
基本运算符
运算符优先级
自加自减运算符
流程结构
while
do while
for
if else
switch
goto
函数
函数形式
函数地址类型
递归函数
参数不确定
[ ] 的三种作用
内存管理
类型转换
大小端存储
位运算
进制转换
位运算符
位字段
文件操作
打开文件
操作文件
关闭文件
其他
类型重命名
宏
多文件
存储类说明符
类型限定符
内存分区
命令行参数
随机数
C语言进阶
十天整理笔记
基础复习
内存管理
指针
数据结构
算法
高级指针
总结
C++基础
C++介绍
基础知识点
> 与C类似,主要讲解有区别的地方
> 2.2数据类型
> 2.3运算符
> 2.4流程结构
> 2.5函数
> 2.6文件操作
> 2.7内存管理
> 2.8其他
类
3.1理论
3.2学习方法
3.3类实例
3.3.1类声明
3.3.2声明对象
3.3.3成员调用
3.3.4访问修饰符
3.3.5函数成员
3.3.6 数据成员
3.4继承
3.4.1继承实例
3.4.2 多态与虚函数
3.4.3虚继承
3.5 其他
运算符重装
4.1作用
4.2 形式
4.3 重载
4.4 重载实例
4.4.1 认识运算符
4.4.2 二元运算符
4.4.3 一元运算符
4.4.4 输入输出赋值
4.4.5 下标运算符
4.4.6 递增递减运算符
4.4.7 重载类型转换
4.5 运算符重载总结
模板
5.1 函数模板
5.2 类模板
5.3 继承的模板
5.4. 模板类型是类的模板
5.5 模板总结
标准函数库
数学基本运算
基本算术运算
随机数产生函数
三角函数
双曲函数
对数与指数
幂函数
字符串
字符串转数字
数字转字符串
字符串转浮点数
浮点数转字符串
功能函数库
日期和时间
非本地跳转
信号
可变参数输入输出
执行环境
locale函数
返回值作为指针函数
STL
容器
数组
array,vector
链表(单向链表,双向链表)
list/forward_list
list lt;
栈
stack
队列
deque
树
map/set
hash表
hash_map
算法
algorithm
迭代器(iterator)
string
string::ierator ite;
vector
vector<int>::iterator ite;
list
list<Node>::iterator ite;
适配器
分配器
仿函数
STL总结
MCU篇
51
基础实验
1、C51的基础知识,regc51.h 头文件有什么作用?
2、51最小系统板的基本组成是什么,用Proteus该怎么画?
3、keil 软件的基本使用,程序如何烧入到单片机芯片中?
4、如何控制LED灯亮灭,原理是什么,程序该怎么写?
5、流水灯程序该如何写,有哪些方法?
6、什么是数码管,单位数码管的基本组成及亮灭原理是什么?
7、如何让单个数码管显示自己想要的数字,程序该怎么写?
8、多位数码管的组成,静态显示与动态显示的区别,断选和位选是什么,各有什么作用?
9、什么是点阵,点阵的原理,如何控制点阵的显示,程序该如何写?
10、独立按键的作用,如果用按键控制LED灯和数码管,程序该怎么写?
11、矩阵键盘的基本结构及检测原理是什么,程序该怎么写?
12、中断的概念,中断的处理机制,如何在程序中使用中断?
13、定时器/计数器的原理以及编程方法是什么?
14、串口通信原理,单片机与单片机如何通信?
15、单片机与PC机串口通信原理,以及编程方法?
16、串口转并口、USB转串口原理?
17、A/D转换原理?
18、D/A转换原理?
19、常见的A/D和D/A转换芯片,以及使用方法?
20、PWM脉冲调速原理是什么,如何编程输出PWM波?
21、LED1602液晶
22、LCD12864液晶
常用芯片
锁存器
38译码器
4 - 16译码器
驱动模块
MAX7219
等等
STM32
1、简介
2、基础使用
3、GPIO
4、外部中断
5、定时器
6、串口
7、PWM
8、ADC、DAC
9、IIC
10、SPI
11、相关外设
Peripherals(外设)
ADC/DAC
RTC
Timer/Watchdog Timer(定时器)
Flash/NAND Fiash
ROM/EEPROM
RAM
SDRAM
DDR1 DDR2 DDR3 DDR4
Cache
PWM
I/O / GPIO
USART
Modem
DTMF
CAN
SPI
I2C
IEEE
CRC
interrupt(中断)
入门开始学先掌握基础的知识,比如GPIO,串口,定时器,中断,PWM,I2C,SPI等等
Sensor(传感器)
RIP(人体红外)
Temperature(温度)
humidity sensor(温度传感器)
geomagnetic sensor(地磁传感器)
acceleration transducer(加速度传感器)
optoelectronic switch(光电开关)
pneumatic sensor(气流传感器)
current sensor(电流传感器)
soil sensor(土壤传感器)
liumination sensor(光照传感器)
laser sensor(激光传感器)
Motion(运动)
Moisture sensor(土壤湿度传感器)
电压传感器
Three-axis gyroscope(三轴陀螺仪)
Camera感光元件(图形传感器)
气压传感器
气敏传感器
粉尘浓度传感器
水位传感器
脉搏传感器
脑皮质电位传感器
弯曲传感器
近距离传感器
很多我也没接触过,我列举这么多主要是拓展,有兴趣的可以去了解下
Communication(通信)
USART
I2C
RS232C/RS485
SPI/SCI/SI
CAN
USB
FireWire
1-wire
网络协议
HTTP
CoAP
MQTT
XMPP
WebSocket
UDP
HTTP
一些我也还没学,我列举这么多主要是拓展,有兴趣的可以去了解下
Actuator(执行器)
直流电机
有刷直流电机
无刷直流电机
交流电机
单相电机
三相电机
步进电机
直线电机
舵机
使用起来还好,但是要深入原理得了解很多控制的原理,难哦
电路基础篇
主要相关课程
电路分析基础
模拟电路
数字电路
网址
Electronic Component(电子元件)
电源
电容
保护装置
开关
电阻
热敏电阻
压敏电阻
光敏电阻
电磁感应装置
电阻排
压电装置、晶体谐振器
二极管
三极管
晶体管
飞行篇
四旋翼
四旋翼基本组成及原理
四旋翼组装与调试
模拟器安装与飞行
实战飞行
核心知识
硬件组装
机架
飞控
电调
电机
光流
陀螺仪
电子罗盘
激光测距
等等
主控芯片
STM32F407
其他都行
飞控相关算法
PID
滤波算法
姿态解算
数据融合
固定翼
固定翼基本组成及原理
固定翼组装与调试
模拟器安装与飞行
实战飞行
软件项目篇
贪食蛇
实现
纯C实现
C++实现
+图像库
主程序
蛇模块
墙模块
食物模块
蛇移动
拓展
五子棋
主要函数
void judge(int y,int x,int color)
判断当前位置4个方向连接的棋子数量,参数为棋子颜色 1白2黑
bool pieceSet(int y, int x,int color
放置棋子,返回true表示放置成功,false 表示放置失败
void initGame()
void initGame()
void initView()
初始化界面
void drawPiece(int x,int y,int color)
绘制棋子
void AI()
机器判断程序
void playerVSplayer()
人人对战
void playerVSAI()
人机对战
俄罗斯方块
设置界面展示信息
方块操作
生成方块
画方块
画下一个方块
方块运动
操作限制
得分消行
死亡判断
左右栏目信息更新
学生管理系统
注册登录
1、设置光标位置
2、输出主菜单
3、登录操作
4、注册操作
5、游客登录
6、退出系统
7、用户存取
8、菜单指令
操作管理
1、主界面
2、添加操作
3、读写文件
4、查看
5、删除
6、修改
7、排序
8、考试
9、退出
10、统筹逻辑
文件加密与数据解析
数据分析并解算
MD5算法
二维码生成
基础知识
定位图案
功能性数据
数据码和纠错码
数据编码
示例一:数字编码
示例二:字符编码
结束符和补齐符
按8bits重排
补齐码(Padding Bytes)
纠错码
最终编码
穿插放置
Remainder Bits
画二维码图
Position Detection Pattern
Alignment Pattern
Timing Pattern
Format Information
Version Information
数据和数据纠错码
掩码图案
专业篇
这几个项目还没研究,在网上看到的,觉得不错,有时间就去看看。里面有GitHub的连接,想学习的可以去看看。
https://github.com/TheAlgorithms/C
https://github.com/ithewei/libhv
https://github.com/Light-City/CPlusPlusThings
https://github.com/JakubVojvoda/design-patterns-cpp
https://github.com/tmux/tmux
https://github.com/netdata/netdata
物联网项目篇
QT上位机
简介
什么是QT?
Qt 是一个跨平台的 C++ 框架(C++库),可以用来写图型界面的应用,这里我们主要用来写电脑软件,用来与下位机通信
QT安装与使用
建立一个新工程
文本框
编辑框
按钮
图片
页面布局
怎么更改控件的背景
引入图片资源
更改控件背景
ui控件与cpp程序关联
提示信息
页面转换
更改软件页面图标
生成动态链接库
功能
TCP通信
客户端
服务器
UDP通信
客户端
服务器
串口
蓝牙通信
主机
从机
QT模块与类
QT基本模块
15个QT基本模块
QT core
核心功能
The Meta-object System 源对象系统
Tread 线程
I/O
容器
资源系统
The Animation Framework 动画框架
The Property System 属性系统
对象模型
信号与槽
The Event System 事件系统
The state Machine Framework 状态机框架
JSON support Json支持
QT Plugins 创建Qt插件
QT core 类
IO 类
Container Classes 容器类
Threading Classes 线程类
Implicitly Shared Classes 隐式共享类
Animation Classes 动画类
Event Classes 事件类
State Machine Classes 状态机类
Plugin Classes 插件类
QT GUI
核心功能
Application Windows 程序窗口
2D Graphics 2D图形
OpenGL and OpenGL ES Integration OpenGL和OpenGL ES的整合
QT GUI 类
Event Classes 事件类
Painting CLasses 绘画类
Rendering in 3D 3D渲染类
QT widgets
Styles 样式
Layouts 布局
Model/VIew Classes 模型/视图类
Graphics View 平面视图
Qt QML
QT Quick
QT Quick Controls
QT Quick Dialogs
QT Quick Layouts
QT Multimedia
C++类
QAudio OutPut
QCamera
QCameramageCapture
QMediaPlayer
QRadioTuner
QVideoRendererControl
QML类
Audio
Camera
MediaPlayer
Radio
video
QT Multimedia Widgets
QT WebKit
QT WebKit Widgets
QT NetWork
QT Sql
QT Test
QT WebView
QT附加模块
QT 开源免费附加模块
跨平台模块
Enfinio
Qt Canvas 3D
QT Concurrent
QT D-Bus
QT Graphical Effects
QT Image Formats
QT Platform Headers
QT Positioning
QT Location
QT Quick Extras
QT Quick WIdgets
QT Script 和 QT Script Tools
QT SVG
QT WebChannel
QT WebSockets
特定平台模块
Active QT Windows
QT Bluetooth android/ios/Linux/ OS X
QT NFC Linux
QT Sensors Android/iOS/WInRT
QT Serial Port Windows/Linux/OS X
QT WebEngine 与 QT WebEngine Widgets WIndows/Linux/OS X
QT WIndows/Mac/X11/Android Extras Windows,OS X,Linux/X11,Android
不再推荐使用的模块
QT Open GL
QT Declarative
QT 企业增值模块
QT for Device Creation
QT Charts
QT Quick Compiler
QT Data Visualization
QT Purchasing
QT Virtual Keyboard
QT Quick 2D Renderer
通信
UDP
TCP
串口
实战项目
一个电脑软件
ESP8266
AT指令模式
SAT模式
当作客户端,需要连接服务器,进行数据传输
AP模式
当作服务器,开放热点,拥有IP地址与端口号,其他客户端可以连接
STA+AP模式
两者都有,但是个人不太喜欢用
当作arduino开发
利用电灯科技,连接阿里云,绑定小爱同学
MQTT通信
TCP通信
UDP通信
TCP通信
Server/Client
怎么连接?
(使用AT指令)
ESP8266 常用指令
配置服务器指令(AP模式)
1、设置模式为AP模式:AT+CWMODE=2
2、重启模块:AT+RST
3、AT+CWSAP="wifi名称","wifi密码",1,3
4、查看模块的ip地址:命令: AT+CIFSR
5、AT+CIPMUX=1 设置为多连接模式,启动模块
6、AT+CIPSERVER=1,8090 服务器的设置端口
配置服务器指令(STA模式)
1、AT+CWMODE=1 配置STA模式
2、AT+RST 重启生效
3、AT+CWJAP="wifi名称","WiFi密码" 连接WIFI
4、AT+CIPSTART="TCP","192.168.4.1",8090 连接服务器
5、AT+CIPSEND=4 发送指令
6、AT+CIPMODE=1 开启透传模式
7、AT+CIPSEND 开始透传
单片机当作服务器
实现
整体流程
配置一个串口,然后将STM32的串口与ESP8266的串口连接
将32的数据传输到ESP8266上,用于ESP8266初始化,也可以将ESP8266的数据传输到32上面,实现消息互传
ESP8266初始化
void esp8266_start_trans(void)
{
//设置工作模式 1:station模式 2:AP模式 3:兼容 AP+station模式
esp8266_send_cmd("AT+CWMODE=2","OK",50);
//Wifi模块重启
esp8266_send_cmd("AT+RST","OK",20);
delay_ms(1000); //延时3S等待重启成功
delay_ms(1000);
delay_ms(1000);
//AP模式
//esp8266_send_cmd("AT+CWSAP=\\"Geek\\",\\"12345678\\",1,4","OK",200); //设置热点的账号密码
esp8266_send_cmd("AT+CIPMUX=1","OK",20);
esp8266_send_cmd("AT+CIPSERVER=1,8080","OK",200);
}
由上面代码可知 esp8266_send_cmd 函数是想ESP8266发送指令,是利用串口发送,具体实现看工程代码
被连接
手机客户端
单片机客户端
电脑客户端
单片机当作客户端
实现
整体流程
配置一个串口,然后将STM32的串口与ESP8266的串口连接
ESP8266初始化
//ESP8266模块和PC进入透传模式
void esp8266_start_trans(void)
{
//设置工作模式 1:station模式 2:AP模式 3:兼容 AP+station模式
esp8266_send_cmd("AT+CWMODE=1","OK",50);
//让Wifi模块重启的命令
esp8266_send_cmd("AT+RST","ready",20);
delay_ms(1000); //延时3S等待重启成功
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
//让模块连接上自己的路由
while(esp8266_send_cmd("AT+CWJAP=\\"GeekPan\\",\\"12345678\\"","WIFI GOT IP",600));
//=0:单路连接模式 =1:多路连接模式
esp8266_send_cmd("AT+CIPMUX=0","OK",20);
//建立TCP连接 这四项分别代表了 要连接的ID号0~4 连接类型 远程服务器IP地址 远程服务器端口号
while(esp8266_send_cmd("AT+CIPSTART=\\"TCP\\",\\"192.168.4.1\\",8090","CONNECT",200));
//是否开启透传模式 0:表示关闭 1:表示开启透传
esp8266_send_cmd("AT+CIPMODE=1","OK",200);
//透传模式下 开始发送数据的指令 这个指令之后就可以直接发数据了
esp8266_send_cmd("AT+CIPSEND","OK",50);
}
由上面代码可知 esp8266_send_cmd 函数是想ESP8266发送指令,是利用串口发送,具体实现看工程代码
去连接
单片机服务器
手机服务器
电脑服务器
总结
ESP8266初始化流程
配置串口
串口的波特率最好为9600,因为在硬件上面,太高可能实现不了
写串口的发送指令函数
用于给ESP8266发送对应的AT指令,初始化
初始化客户端与服务器类似,只是发送的指令不同,但都需要利用串口发送
硬件连线是TX接RX,RX接TX
配置思路
如果单片机当作服务器,那么ESP8266就是AP模式,开放热点,拥有IP地址与端口号。其他TCP客户端想要连接服务器时,需要先连接热点,然后再绑定IP地址与端口号,进行连接
如果是STA模式,就需要连接服务器的热点,绑定IP地址与端口号,进行连接
连接范围
因为是利用WIFI局部通信,只是在局部网内有效,想要实现广域网通信,可以连接到云服务器,需要利用WIFI或者流量配置
怎么进行数据传输
发送数据
接收数据
STM32与ESP8266
主要利用串口进行数据传输
STM32串口发送数据
代码实现
//向ESP8266发送命令
//cmd:发送的命令字符串;ack:期待的应答结果,如果为空,
//则表示不需要等待应答;waittime:等待时间(单位:10ms)
//返回值:0,发送成功(得到了期待的应答结果);1,发送失败
u8 esp8266_send_cmd(u8 *cmd,u8 *ack,u16 waittime)
{
u8 res=0;
USART3_RX_STA=0;
u3_printf("%s\\r\\n",cmd); //发送命令
if(ack&&waittime) //需要等待应答
{
while(--waittime) //等待倒计时
{
delay_ms(10);
if(USART3_RX_STA&0X8000)//接收到期待的应答结果
{
if(esp8266_check_cmd(ack))
{
printf("ack:%s\\r\\n",(u8*)ack);
break;//得到有效数据
}
USART3_RX_STA=0;
}
}
if(waittime==0)res=1;
}
return res;
}
USART3_RX_STA
一个 unsigned short 的变量
USART3_RX_BUF
接收缓冲区
STM32串口接收数据
代码实现
if(USART3_RX_STA&0x8000)
{
printf("USART3_RX_BUF=%s\\r\\n",USART3_RX_BUF);
sprintf(a,"%s",USART3_RX_BUF);
printf("a=%s",a);
if(strstr((const char*)a,"on")) GPIO_ResetBits(GPIOB,GPIO_Pin_5);
if(strstr((const char*)a,"off")) GPIO_SetBits(GPIOB,GPIO_Pin_5);
USART3_RX_STA=0;
}
USART3_RX_STA
一个 unsigned short 的变量
USART3_RX_BUF
接收缓冲区
注意点
因为ESP8266利用串口向32发送的数据,数据格式不同,需要过滤掉多余的数据
具体实现还是看整体的工程代码
Client与Server
Client发送与接收
Client是单片机
esp8266_send_cmd("数据","OK",50);
数据发送流程
客户端利用串口给客户端的ESP8266发送数据
因为客户端与服务器已经连接,然后数据传输到服务器的ESP8266上
服务器的ESP8266又利用串口给32发送数据
最终32得到数据,可以根据数据执行相应的动作
图片示意图
Client是上位机
上位机简单理解就是电脑软件,手机软件,可以用来控制单片机
上位机发送数据,就是直接传输到服务器的ESP8266上,然后再利用串口发送给32
示意图
Server发送与接收
Server是单片机
同理
Server是上位机
同理
Android项目
什么是Android?
可以开发手机APP
如何开发一个安装APP
开发环境
Android Studio
新建一个基本工程,测试开发环境
新建空白工程
利用USB线与电脑连接
手机进入开发者模式
打开手机USB安装与调试
在Android Studio中运行程序
如果开发环境无误,那么就会在手机上安装一个APP
控件
按键
图片按钮
文本框
编辑框
选择开关
拓展
拖动条
进度条
浏览器框
地图
单选框
复选框
功能
TCP通信
客户端
服务器
UDP通信
客户端
服务器
串口
蓝牙通信
主机
从机
MQTT通信
连接外部的MQTT服务器
智能家居项目
通信
局域网
广域网
ESP8266基础教程
AT指令模式
SAT模式
当作客户端,需要连接服务器,进行数据传输
AP模式
当作服务器,开放热点,拥有IP地址与端口号,其他客户端可以连接
STA+AP模式
两者都有,但是个人不太喜欢用
当作arduino开发
利用电灯科技,连接阿里云,绑定小爱同学
MQTT通信
TCP通信
UDP通信
TCP通信
Server/Client
怎么连接?
(使用AT指令)
ESP8266 常用指令
配置服务器指令(AP模式)
1、设置模式为AP模式:AT+CWMODE=2
2、重启模块:AT+RST
3、AT+CWSAP="wifi名称","wifi密码",1,3
4、查看模块的ip地址:命令: AT+CIFSR
5、AT+CIPMUX=1 设置为多连接模式,启动模块
6、AT+CIPSERVER=1,8090 服务器的设置端口
配置服务器指令(STA模式)
1、AT+CWMODE=1 配置STA模式
2、AT+RST 重启生效
3、AT+CWJAP="wifi名称","WiFi密码" 连接WIFI
4、AT+CIPSTART="TCP","192.168.4.1",8090 连接服务器
5、AT+CIPSEND=4 发送指令
6、AT+CIPMODE=1 开启透传模式
7、AT+CIPSEND 开始透传
单片机当作服务器
实现
整体流程
配置一个串口,然后将STM32的串口与ESP8266的串口连接
将32的数据传输到ESP8266上,用于ESP8266初始化,也可以将ESP8266的数据传输到32上面,实现消息互传
ESP8266初始化
void esp8266_start_trans(void)
{
//设置工作模式 1:station模式 2:AP模式 3:兼容 AP+station模式
esp8266_send_cmd("AT+CWMODE=2","OK",50);
//Wifi模块重启
esp8266_send_cmd("AT+RST","OK",20);
delay_ms(1000); //延时3S等待重启成功
delay_ms(1000);
delay_ms(1000);
//AP模式
//esp8266_send_cmd("AT+CWSAP=\\"Geek\\",\\"12345678\\",1,4","OK",200); //设置热点的账号密码
esp8266_send_cmd("AT+CIPMUX=1","OK",20);
esp8266_send_cmd("AT+CIPSERVER=1,8080","OK",200);
}
由上面代码可知 esp8266_send_cmd 函数是想ESP8266发送指令,是利用串口发送,具体实现看工程代码
被连接
手机客户端
单片机客户端
电脑客户端
单片机当作客户端
实现
整体流程
配置一个串口,然后将STM32的串口与ESP8266的串口连接
ESP8266初始化
//ESP8266模块和PC进入透传模式
void esp8266_start_trans(void)
{
//设置工作模式 1:station模式 2:AP模式 3:兼容 AP+station模式
esp8266_send_cmd("AT+CWMODE=1","OK",50);
//让Wifi模块重启的命令
esp8266_send_cmd("AT+RST","ready",20);
delay_ms(1000); //延时3S等待重启成功
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
//让模块连接上自己的路由
while(esp8266_send_cmd("AT+CWJAP=\\"GeekPan\\",\\"12345678\\"","WIFI GOT IP",600));
//=0:单路连接模式 =1:多路连接模式
esp8266_send_cmd("AT+CIPMUX=0","OK",20);
//建立TCP连接 这四项分别代表了 要连接的ID号0~4 连接类型 远程服务器IP地址 远程服务器端口号
while(esp8266_send_cmd("AT+CIPSTART=\\"TCP\\",\\"192.168.4.1\\",8090","CONNECT",200));
//是否开启透传模式 0:表示关闭 1:表示开启透传
esp8266_send_cmd("AT+CIPMODE=1","OK",200);
//透传模式下 开始发送数据的指令 这个指令之后就可以直接发数据了
esp8266_send_cmd("AT+CIPSEND","OK",50);
}
由上面代码可知 esp8266_send_cmd 函数是想ESP8266发送指令,是利用串口发送,具体实现看工程代码
去连接
单片机服务器
手机服务器
电脑服务器
总结
ESP8266初始化流程
配置串口
串口的波特率最好为9600,因为在硬件上面,太高可能实现不了
写串口的发送指令函数
用于给ESP8266发送对应的AT指令,初始化
初始化客户端与服务器类似,只是发送的指令不同,但都需要利用串口发送
硬件连线是TX接RX,RX接TX
配置思路
如果单片机当作服务器,那么ESP8266就是AP模式,开放热点,拥有IP地址与端口号。其他TCP客户端想要连接服务器时,需要先连接热点,然后再绑定IP地址与端口号,进行连接
如果是STA模式,就需要连接服务器的热点,绑定IP地址与端口号,进行连接
连接范围
因为是利用WIFI局部通信,只是在局部网内有效,想要实现广域网通信,可以连接到云服务器,需要利用WIFI或者流量配置
怎么进行数据传输
发送数据
接收数据
STM32与ESP8266
主要利用串口进行数据传输
STM32串口发送数据
代码实现
//向ESP8266发送命令
//cmd:发送的命令字符串;ack:期待的应答结果,如果为空,
//则表示不需要等待应答;waittime:等待时间(单位:10ms)
//返回值:0,发送成功(得到了期待的应答结果);1,发送失败
u8 esp8266_send_cmd(u8 *cmd,u8 *ack,u16 waittime)
{
u8 res=0;
USART3_RX_STA=0;
u3_printf("%s\\r\\n",cmd); //发送命令
if(ack&&waittime) //需要等待应答
{
while(--waittime) //等待倒计时
{
delay_ms(10);
if(USART3_RX_STA&0X8000)//接收到期待的应答结果
{
if(esp8266_check_cmd(ack))
{
printf(以上是关于极客C -项目教程 C/C++|MCU|软件|物联网|嵌入式|Linux|辅助设计|飞行器的主要内容,如果未能解决你的问题,请参考以下文章