极客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 头文件有什么作用?
251最小系统板的基本组成是什么,用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个方向连接的棋子数量,参数为棋子颜色 12bool 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|辅助设计|飞行器的主要内容,如果未能解决你的问题,请参考以下文章

酷易物联介绍篇

辛苦整理的 C/C++ 笔记,请惠存!

极客头条访问量的统计

物联网领域带动灵动微MCU市场需求

嵌入式MCU开发群资源

直线型一阶倒立摆6---软件设计