辅助设计篇|极客C -项目教程 C/C++|MCU|软件|物联网|嵌入式|Linux|辅助设计|飞行器

思维导图文章末附录,这里主要是项目体系,具体内容分篇章讲解。
个人网站
绪论 教程说明 因为模块太多,全部放在一起有些冗杂,所以每一个部分都有单独的文件,也为了能更好的描述,切换画布或者点击链接跳转就可以查看
应该加强核心的知识,并且学会融合进入其他的项目当中,举一反三。比如可以利用单片机与显示屏生成显示二维码,学生管理系统连接到数据库操作,五子棋实现人机对战等等。简单的逻辑实现比较简单,但是多元化的融合需要有较深的理解。
以简入繁,以剑破点,每一个知识点都要直击核心,抓住重点。每个人精力都有限,我希望用更短的时间做更高效的事。
培养方案 项目主要以实践为主,会写文章,做视频进行教学,刨析内部的每一个知识细节,通过一个项目,能掌握一个体系的知识。不过视频暂时做不了,因为没时间
教程总结 由于时间有限,个人水平有限,教程的内容叙述较浅,因为知识面较广,每一部分想要深入都需要大量的时间,想要真的掌握需要时间的沉淀。不过入门过后就能按照自己的需求去深入学习,网上有很多较好的开源资料,几乎想学什么都会有,所以找资源也是一个非常重要的技能。
项目在于精,而不在于多,从简单的实现到不断拓展精炼,从而实现更实用,更完善的项目。知识面广有助于思维的扩散,但是专精某一方向,才能在领域中有立足之地。
不积跬步无以至千里
语言篇 C语言基础 简单程序

注意点 头文件 主函数 注释 输入输出

数据类型
整型 浮点型 字符类型 数组 结构体 联合 枚举 指针

运算符
基本运算符 运算符优先级 自加自减运算符

流程结构
while do while for if else switch goto

函数
函数形式 函数地址类型 递归函数 参数不确定 [ ] 的三种作用

内存管理
类型转换 大小端存储

【辅助设计篇|极客C -项目教程 C/C++|MCU|软件|物联网|嵌入式|Linux|辅助设计|飞行器】位运算
进制转换 位运算符 位字段

文件操作
打开文件 操作文件 关闭文件

其他
类型重命名 宏 多文件 存储类说明符 类型限定符 内存分区 命令行参数 随机数

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::iterator ite; list list::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 supportJson支持 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 IntegrationOpenGL和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 QTWindows QT BluetoothAndroid/iOS/Linux/ OS X QT NFCLinux QT SensorsAndroid/iOS/WInRT QT Serial Port Windows/Linux/OS X QT WebEngine 与 QT WebEngine WidgetsWIndows/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("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是上位机 同理 PCB设置 参考网址 硬件设计 ESP8266-NODEMCU开发板 ESP32-cam 外设 DHT11温湿度传感器 光敏传感器 AS608光学指纹模块 舵机 减速电机 步进电机 红外管 OLED显示屏 LED灯 其他 软件设计 服务器端 1.node-red node-red是一个非常方便的在线可视化编程,且提供了web组件框架,可以很方便地进行测试开发;下图便是node-red的线上开发环境,可视化拖拉工具就行了。 2.MQTT服务器 EMQ主要用来搭建MQTT服务器,网上有很多现成免费的MQTT服务器可以使用,但终归自己的才是最好的;当使用node-red服务的时候,会出现途中掉线,服务挂掉的情况,这种情况是由于没有托管,导致node-red自动退出,可以使用dockter托管安装(但是由于刚开始不知道,我各种搜寻,找到了forever这个托管工具,用着倒是挺简单且没有出现问题),下图便是EMQ自带的管理后台。功能很多,但没用上,主要也就是用于MQTT服务器使用

嵌入式项目篇
基础知识 51 STM32 keil软件的安装与使用 安装 软件安装,破解 keil5安装包 注册机 相关的驱动与支持包 串口驱动 JlinkSTlink驱动 51 STM32F10X/F4 等等 需要什么就安装什么 使用 建立一个新的工程 使用别人的工程 keil一些重要的操作 程序烧录 串口下载 仿真器下载 Jlink下载 STlink下载 其他下载 点亮一个LED灯 配置IO口 void GPIO_Config(void)//GPIO初始配置 {GPIO_InitTypeDef GPIO_InitStructure; //定义结构体变量RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); //使能GPIOD的时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; //指定引脚13 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置输出速率50MHz GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出模式 GPIO_Init(GPIOD, &GPIO_InitStructure); //初始化外设GPIOx寄存器 } 将IO口拉高或拉低 GPIO_ResetBits(GPIOD,GPIO_Pin_13); PD13引脚拉低 GPIO_SetBits(GPIOD,GPIO_Pin_13); PD13引脚拉高 LED灯闪烁 在LED灯亮灭的基础上加上延时函数 融入delay.h与delay.c文件 在工程中融合其他模块程序 独立按键 进行相关设置 温湿度传感器 获取当前环境温湿度,显示到上位机 0.96寸OLED 显示屏 直流电机、电机驱动、扇叶 风扇 蜂鸣器 警报 RFID-RC522 门禁卡 ESP8266模块 实现通信的核心模块 会看,会用,会改 至于每个模块内部的具体原理,如果不是特别感兴趣,可以不用了解,会用就行 传感器 电机驱动 L298N TB6612FNG L9110S 测距 激光测距 超声波测距 OLED WIFI 蓝牙 摇杆 语言模块 舵机 摄像头 图传 MPU6050 等等 实战项目 智能小车项目 智能小车远程控制系统 平衡小车 玲珑机器人(硬件) 机器人自平衡 主要模块 MUP6050 电机、电机驱动 机器人主体 设计思路 PID算法 OLED显示相关信息 显示相关参数,比如姿态、测距、文学、图像信息等 超声波测距 测量距离,可以利用距离来设计动作 舵机控制肢体动作 语音控制机器人动作 WIFI通信 利用APP控制机器人的基本动作 硬件摇杆 利用摇杆控制机器人动作 无线图传 显示图像信息 图像识别 根据图像实现设计的功能 掌握核心知识过后,就能做自己想做的,项目不在多,而是要能消化内部的知识。

辅助设计篇 焊接与基本测量工具
数字式万用表 测量前先打到测量的档位,要注意的是档位上所标的是量程,即最大值 吸锡器 电络铁 掌握好电烙铁的温度,当在铬铁上加松香冒出柔顺的白烟,而又不"吱吱"作响时为焊接最佳状态。控制焊接时间,不要太长,这样会损坏元件和电路板。清除焊点的污垢,要对焊接的原件用刻刀除去氧化层并用松香和锡预先上锡。 焊锡 焊接用品,在锡中间有松香 松香 除去氧化物的焊接用品 助焊剂 作用和松香一样,但效果比松香好,可是,因为助焊剂含有酸性,所以使用过的原件都要用洒精擦净,以防腐蚀。 示波器 示波器是一种用来测量交流电或脉冲电流波的形状的仪器,由电子管放大器、扫描振荡器、阴极射线管等组成。除观测电流的波形外,还可以测定频率、电压强度等。凡可以变为电效应的周期性物理过程都可以用示波器进行观测。 分类编辑 游标卡尺 游标卡尺(VERNIER CALLIPER),是一种测量长度、内外径、深度的量具。游标卡尺由主尺和附在主尺上能滑动的游标两部分构成。 其他 用啥就学啥

PCB画板与打印
软件安装 AD 入门难度稍大 立创EDA 主要介绍 其他也行 PCB是什么? 印刷电路板 为什么要用PCB? 减少赘余的线路 因为项目用面包板和杜邦线连接的话,整体看起来会显得杂乱无章,不美观,而且一旦模块过多,出现错误不容易排查。如果使用PCB,可以利用软件先画出自己想要的板子,然后去打印出来,再将对应模块安装好就行。 如何打印PCB? 嘉立创 https://www.jlc.com 锦邦达 http://pay.jinbang-pcb.com/Order_add.aspx 顺易捷 https://www.syjpcb.com 华秋 https://www.hqpcb.com PCB文件制作方法 前期准备 这包括准备元件库和原理图。“工欲善其事,必先利其器”,要做出一块好的板子,除了要设计好原理之外,还要画得好。在进行PCB设计之前,首先要准备好的元件(原理图库和PCB库)。元件库可以用立创EDA的元件库,元件库内容丰富。 PCB结构设计 这一步根据已经确定的电路板尺寸,在PCB 设计环境下绘制PCB板面,并按定位要求放置所需的接插件、按键/开关、螺丝孔、装配孔等等。并充分考虑和确定布线区域和非布线区域。 PCB布局 按电气性能合理分区,一般分为:数字电路区(即怕干扰、又产生干扰)、模拟电路区(怕干扰)、功率驱动区(干扰源); 完成同一功能的电路,应尽量靠近放置,并调整各元器件以保证连线最为简洁; 同时,调整各功能块间的相对位置使功能块间的连线最简洁; 对于质量大的元器件应考虑安装位置和安装强度; 发热元件应与温度敏感元件分开放置,必要时还应考虑热对流措施; I/O驱动器件尽量靠近印刷板的边、靠近引出接插件; 时钟产生器(如:晶振或钟振)要尽量靠近用到该时钟的器件; 在每个集成电路的电源输入脚和地之间,需加一个去耦电容(一般采用高频性能好的独石电容); 电路板空间较密时,也可在几个集成电路周围加一个钽电容。 继电器线圈处要加放电二极管; 布局要求要均衡,疏密有序,不能头重脚轻或一头沉 特别注意 在放置元器件时,一定要考虑元器件的实际尺寸大小(所占面积和高度)、元器件之间的相对位置,以保证电路板的电气性能和生产安装的可行性和便利性同时,应该在保证上面原则能够体现的前提下,适当修改器件的摆放,使之整齐美观,如同样的器件要摆放整齐、方向一致,不能摆得“错落有致” 。 布线 布线一般有这么三种境界的划分 首先是布通,这时PCB设计时的最基本的要求。如果线路都没布通,搞得到处是飞线,那将是一块不合格的板子,可以说还没入门。 其次是电器性能的满足。这是衡量一块印刷电路板是否合格的标准。这是在布通之后,认真调整布线,使其能达到最佳的电器性能。 接着是美观。假如你的布线布通了,也没有什么影响电器性能的地方,但是一眼看过去杂乱无章的,加上五彩缤纷、花花绿绿的,那就算你的电器性能怎么好,在别人眼里还是垃圾一块。这样给测试和维修带来极大的不便。 布线优化和丝印 一般优化布线的时间是初次布线的时间的两倍。感觉没什么地方需要修改之后,就可以铺铜了(Place->polygon Plane)。铺铜一般铺地线(注意模拟地和数字地的分离),多层板时还可能需要铺电源。 对于丝印,要注意不能被器件挡住或被过孔和焊盘去掉。同时,设计时正视元件面,底层的字应做镜像处理,以免混淆层面。 网络和DRC检查和结构检查 在确定电路原理图设计无误的前提下,将所生成的PCB网络文件与原理图网络文件进行物理连接关系的网络检查(NETCHECK),并根据输出文件结果及时对设计进行修正,以保证布线连接关系的正确性; 网络检查正确通过后,对PCB设计进行DRC检查,并根据输出文件结果及时对设计进行修正,以保证PCB布线的电气性能。最后需进一步对PCB的机械安装结构进行检查和确认。 制版 总结

PCB设计是一个考心思的工作,谁的心思密,经验高,设计出来的板子就好。所以设计时要极其细心,充分考虑各方面的因数(比如说便于维修和检查这一项很多人就不去考虑),精益求精,就一定能设计出一个好板子
3D建模与打印
建模工具 SolidWorks 3Dmax 其他 会那种就用那种 模型打印 方式比较多,还得看3D打印机类型 一般是STL文件用的比较多 这方面主要是建模,得结合实际需求设计 文档撰写 思维导图 策划、海报、视频等等各方面

Linux项目篇 基础知识
Linux 基础知识 发展 特定和优势 应用场景 常见的Linux系统版本 CentOS Ubuntu 其他 Linux 环境 搭建方式 虚拟机 云服务器 在线工具 其他 远程连接 SSH 连接工具 XShell MobaXterm FinalShell Linux操作系统基础 文件和目录的操作 ls显示文件和目录列表cd切换目录pwd显示当前工作目录 mkdir创建目录rmdir删除空目录 touch生成一个空文件或更改文件的时间cp复制文件或目录mv 移动文件或目录、文件或目录改名 rm 删除文件或目录 ln 建立链接文件 find 查找文件 file/stat 查看文件类型或文件属性信息 echo 把内容重定向到指定的文件中 ,有则打开,无则创建 管道命令 | 将前面的结果给后面的命令,例如:`ls -la | wc `,将ls的结果加油wc命令来统计字数 重定向 > 是覆盖模式,>> 是追加模式 例如:`echo "Java3y,zhen de hen xihuan ni" > qingshu.txt `把左边的输出放到右边的文件里去 查看文件 cat 查看文本文件内容 more 可以分页看 less 不仅可以分页,还可以方便地搜索,回翻等操作 tail -10 查看文件的尾部的10行 head -20 查看文件的头部20行 系统信息 uname 查看系统信息 hostname 查看主机名 cat/proc/cpuinfo 查看CPU信息 lsmod 查看已加载的系统模块 top 查看系统使用情况 df 查看磁盘分区 du 查看目录使用情况 lostat 查看I/O 使用情况 free 显示系统内存情况 env 查看环境变量 uptime 查看系统运行时间、用户数、负载 系统操作 shutdown 关机 reboot 重启 mount 挂载设备 umount 卸载设备 管理用户 用户管理 useradd 添加用户 usermod 修改用户 userdel 删除用户 组管理 groupadd 添加组 groupmod 修改组 groupdel 删除组成批添加/更新一组账户:newusers 成批更新用户的口令:chpasswd 组成员管理: 向标准组中添加用户gpasswd -a <用户账号名> <组账号名>usermod -G <组账号名> <用户账号名>从标准组中删除用户gpasswd -d <用户账号名> <组账号名> 口令管理修改 /etc/login.defs 的相关配置参数passwd 设置已存在用户的口令时效: change 切换用户 su sudo 用户相关的命令: id:显示用户当前的uid、gid和用户所属的组列表 groups:显示指定用户所属的组列表 whoami:显示当前用户的名称 w/who:显示登录用户及相关信息 newgrp:用于转换用户的当前组到指定的组账号,用户必须属于该组才可以正确执行该命令 进程管理 ps:查找出进程的信息 nice和renice:调整进程的优先级 kill:杀死进程作业管理 jobs:列举作业号码和名称 bg: fg:在前台恢复运行 ctrl+z:暂时停止某个进程 自动化任务 at cron 管理守护进程 chkconfig service 打包和压缩文件 压缩 gzip filename bzip2 filename tar -czvf filename 解压 gzip -d filename.gz bzip2 -d filename.bz2 tar -xzvf filename.tar.gz grep+正则表达式 grep -n mystr myfile 在文件 myfile 中查找包含字符串 mystr的行 grep'^[a-zA-Z]'myfile 显示 myfile 中第一个字符为字母的所有行 Vi编辑器 普通模式 G ZZ ZQ /和? n yy p dd 删除一行文本 u 取消上一次编辑操作(undo) 插入模式 使用i或a或o进去插入模式 使用esc返回普通模式 命令行模式 w w wq q! q 设置Vi环境 set autoindent缩进,常用于程序的编写 set noautoindent 取消缩进 set number 在编辑文件时显示行号 set tabstop=value 设置显示制表符的空格字符个数 set 显示设置的所有选项 权限管理 改变文件或目录的权限:chmod 改变文件或目录的属主(所有者):chown设置文件的缺省生成掩码:umask 文件扩展属性 其他ifconfig:查看网络接口信息 ifup/ifdown:开启或关闭接口 临时配置相关 route命令:可以临时地设置内核路由表 hostname命令:可以临时地修改主机名 sysctl命令:可以临时地开启内核的包转发ifconfig 检测网络接口配置route 检测路由配置ping 检测网络连通性netstat 查看网络状态lsof 查看指定IP 和/或 端口的进程的当前运行情况host/dig/nslookup 检测DNS解析traceroute 检测到目的主机所经过的路由器tcpdump 显示本机网络流量的状态 安装软件 yum rpm wget vim 基本工作模式 命令模式 移动光标 左移 右移 下移 上移 光标移动文件开头 光标移动到文件末尾 光标移动到行首 光标移动到行尾 跳转到第123行 删除 删除光标后一个字符,相当于 Del 删除光标前一个字符,相当于 Backspace 删除光标开始位置的字,包含光标所在字符 光标必须移动到删除单词的首字符上 删除光标前本行所有内容 删除光标后本行所有内容 删除光标所在行 删除10行 并不是真的删除,实际上是剪切 撤销操作 一步一步撤销 反撤销 复制粘贴 复制当前行 从当前行开始复制10行 在光标所在位置向下新开辟一行,粘贴 在光标所在位置向上新开辟一行,粘贴 可视模式 按字移动 按行移动 如何移动光标? 如何复制选中的内容? 查找操作 从光标所在位置向后查找 hello 从光标所在位置向前查找 hello 在要查询的单词上使用哪个符号就能对单词进行查找 切换位置? 替换操作 替换所在的字符 文本行移动 文本行右移 文本行左移 查看 Man Page 光标移动到函数上 查看第三章的 ManPage 文本输入模式 进入输入模式 插入光标前一个字符 插入行首 插入光标后一个字符 插入行未 向下新开一行,插入行首 向上新开一行,插入行首 删除光标所在的字符 删除当前行 末行模式 命令 行跳转 跳转到第123行 替换 替换一行 将当前行中的第一个abc替换为123 将当前行中的abc全部替换为123 替换全部 将所有行中的第一个abc替换为123 将所有行中的abc全部替换为123 替换指定行 将10-30行中的abc全部替换为123 执行shell命令 分屏操作 末行模式 水平分屏 垂直分屏 分屏显示两个不同的文件 操作 保存并退出所有屏幕 保存并退出光标所在的屏幕 屏幕切换 vim 打造 IDE 系统级配置文件目录: 用户级配置文件目录: 命令模式命令模式 文本模式 末行模式 完成 文件 完成 Linux网络编程 计算机网络知识补充 计算机网络概论 应用层协议 运输层协议:TCP与UDP 网络层协议 数据链路层协议 TCP网络通信刨析 三次握手与四次握手 TCP流量控制 TCP拥塞避免 TCP状态转换 socket网络编程接口 socket的创建与关闭 server端:bind、listen、accept Client端:connect 数据的发送与接收:send、recv UDP编程实现 在UDP上使用connect 基于CS模型的TCP客服端设计与实现 P2P模型网络服务的实现 HTTP与BS模型 简单的网络并发模型 基于多线程与多进程 简单的IO多路复用机制 项目实战 服务器集群监控系统 Linux系统编程 Linux系统编程入门 命令行参数解析 用于调试测试的宏实现 通用功能封装 文件I/O 文件的打开、关闭、读写 阻塞与非阻塞IO 同步IO 内核内幕:虚拟文件系统 缓冲I/O 标准I/O 流的开大、关闭与读写 控制缓冲 线程安全:对文件加锁 多进程编程 进程体系:进程ID,父子进程关系 运行新的进程:fork、exec 终止进程 等待子进程退出 特殊进程 僵尸进程 孤儿进程 守护进程 高级进程管理 进程调度 完全公平调度算法 实时系统的原理与实现 线程池的实现 进程与通信IPC 基于文件的简单进程间通信 共享内存:互斥锁、条件变量 管道:匿名管道与命名管道 共享存储映射 消息队列 信号量 套接字 多线程编程 线程与进程的对比 线程模型 线程API 线程模式 一个连接对应一个线程 事件驱动 并发、并行和竞争 同步:互斥与死锁 信号 基本信号管理 发送信号 信号集 高级信号管理 时间 时间的表示 睡眠与等待 定时器 高级IO 分散、聚集IO IO多路复用 select poll epoll IO调度器与IO性能 终端IO编程 终端驱动程序的模式 ncurses库使用 项目实战 实现自己的shell

实战项目
Client/Server 介绍 Socket是进程间通信的方式之一,是进程间的通信。这里说的进程并不一定是在同一台机器上也有可能是通过网络连接的不同机器上。只要他们之间建立起了socket的连接,那么数据便可以在机器之间进行双向的交流,直到连接断开。 socket的建立 在我们接触到实际的代码API之前,我们应该对基础的连接方式有所了解。 Note left of server: 建立一个正被监听的socket并等待客户端的连接 Note right of client: 建立一个客户端的socket并尝试连接server Note left of server: 接受来自client的连接请求 server->client: 发送与接受数据 client->server: 接受与发送数据 Note left of server: 关闭当前的连接 Note right of client: 关闭当前的连接 连接步骤 首先server需要创建正在被监听的socket,等待client的连接请求。 client创建一个socket,尝试连接server。 server接受client的请求,建立起两者之间的连接。 数据交换,双向通信。 任何一方都可以断开连接,断开后连接会自动销毁。 Client 通过系统函数socket()创建一个socket。 通过系统函数connect()向server端的socket发起请求。 交换数据,实现这种数据交换的方式有很多种方式,其中最简单的就是使用系统函数read(),write()。 Server 通过系统函数socket()创建一个socket。 通过系统函数bind()绑定这个socket到server的一个端口上。 通过系统函数listen()监听这个socket。 当监听到又一个请求来临时,通过系统函数accept()接受一个请求。这个函数会阻塞io直到两者的连接完全断开。 交换数据。 socket的类型 当一个socket被建立起来之后,进程间需要去说明所使用的协议和socket type。只有通信的双方都拥有相同的type和协议。 目前广泛使用的协议有两大类,分别是Unix文件系统协议(Unix domain)、Internet网络协议(Internet domain)。对应的他们有各自的特点。使用Unix domain的双方使用公共的文件系统进行通信,使用Internet domain的进程分别位于不同的主机上,他们通过网络进行通信。 使用Unix domain的socket地址本质上就是文件系统的一个记录,本身是一条字符串。 使用Interner domain的socket包含两部分,一部分是主机的IP地址,一部分是socket绑定到的端口号。一般端口号比较低的端口都会被当作特殊的用途,比如端口号是80的端口是提供http服务的。 目前广泛使用的socket类型也是两种,一种是流socket(stream sockets),一种是数据报socket(datagram sockets)。stream socket处理通信就像是处理流水一样的连续不断的字节流,而datagram sockets需要读取完整的字符,通常一个字符由几个字节组成。 建立在使用TCP协议的基础上,这是一种可靠的面向字节流的协议,另外一种协议是UDP协议,这是一种不可靠的面向字符的协议。 创建步骤 创建socket socket_desc = socket(AF_INET, SOCK_STREAM, 0); if (-1 == socket_desc) {perror("cannot create socket"); exit(1); } 设置远程服务器的信息 server.sin_addr.s_addr = inet_addr("127.0.0.1"); server.sin_family = AF_INET; server.sin_port = htons(80); 连接 if (connect(socket_desc, (struct sockaddr *)&server, sizeof(server)) < 0) {perror("cannot connect"); return 0; } 当服务器接受请求时便会建立连接 函数说明 connect()函数 简介 connect()函数会向服务器发起请求建立一个连接。 参数 int sockfd => socket的描述符 const struct sockaddr *addr => sockaddr的结构体,通用的socket地址 socklen_taddrlen => socket描述符的长度。 struct sockaddr是通用的套接字地址,而struct sockaddr_in则是Internet环境下套接字的地址形式,二者长度一样,都是16个字节。二者是并列结构,指向sockaddr_in结构的指针也可以指向sockaddr。一般情况下,需要把sockaddr_in结构强制转换成sockaddr结构再传入系统调用函数中。 另外代码中的htons()函数的作用是将主机的数据转化为网络字节的顺序 send()函数 recv()函数 htons()函数 socket()函数 介绍 https://www.cnblogs.com/tingyugetc/p/6253041.html 网上很多资料,搜一搜就会有很多 实现自己的shell 网址 https://blog.csdn.net/OCTODOG/article/details/70942194 https://blog.csdn.net/qq_44049351/article/details/99702807 服务器集群监控系统 网址 https://blog.51cto.com/wangfx/1955766 网上资料比较冗杂,要学会区分 搭建一个网站

拓展篇
FreeROTS嵌入式实时操作系统 网址 官网 https://www.freertos.org https://zhuanlan.zhihu.com/p/90608412 https://www.pcworld.com/article/460666/tesla_cto_talks_model_s_batteries_and_incar_linux.html 视频 https://www.bilibili.com/video/BV1C5411M7gK?from=search&seid=5307118440328018083&spm_id_from=333.337.0.0 在B站搜有很多,韦东山,正点原子等都有 如何移植FreeROTS Linux实时操作系统 简介 RTLinux(AReal-Time Linux,亦称作实时Linux)是Linux中的一种 实时操作系统 。 网址 https://zhuanlan.zhihu.com/p/147563274 ucos实时多任务操作系统 网址 https://blog.csdn.net/ideal121/article/details/119571307 ARM 网址 https://blog.csdn.net/weixin_38717634/article/details/112860225?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163324583316780274116753%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=163324583316780274116753&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-2-112860225.pc_search_all_es&utm_term=ARM&spm=1018.2226.3001.4187 ESP 网址 https://blog.csdn.net/wdscq1234/article/details/52705458?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163324798016780261927900%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=163324798016780261927900&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-52705458.pc_search_all_es&utm_term=ESP&spm=1018.2226.3001.4187 其他

总结
每一个方想深入都比较难,建议多实践操作与总结,自己也很多内容没整明白,但是往后的时间会不断去学,加强巩固,深入拓展 入门建议看视频,跟着视频练,对基础知识掌握过后,就要多实践思考,基础非常重要,不要没基础就去研究深奥的知识

辅助设计篇|极客C -项目教程 C/C++|MCU|软件|物联网|嵌入式|Linux|辅助设计|飞行器
文章图片



    推荐阅读