目录
- 深入理解网络栈
- 直接用IP访问百度会有问题
- 网络调试助手直接连接阿里云(MQTT)
- FreeRTOS实现mqtt客户端
- Linux下应用层操作UART的四种方式(轮询/中断/信号/线程)
- C程序中10个与内存有关的常见错误
- 【网络原理】TCP协议如何实现可靠传输(后包先置处理)
- python教程
- UML时序图绘制
- python session和cookie使用
- MQTT 自动重连最佳实践
- pthread_cancel函数:避免踩坑
- 不同接地方式的区分:功率地,逻辑地,数字地,模拟地等
- C语言——动态内存函数(malloc、calloc、realloc、free)
- STM32上电启动过程分析
- 乐鑫环境搭建视频
- 杨奉武物联网博客解读
- C语言的编译过程详解
- RTK高精度定位、电台、基站、流动站名词解释
深入理解网络栈
https://blog.csdn.net/qq_24313621/article/details/131757225
直接用IP访问百度会有问题
https://mp.weixin.qq.com/s/EeMcK1pTeCXVShX7kjZ53w
网络调试助手直接连接阿里云(MQTT)
https://www.bilibili.com/read/cv12045128
FreeRTOS实现mqtt客户端
Linux下应用层操作UART的四种方式(轮询/中断/信号/线程)
https://mp.weixin.qq.com/s/3OADFTBQb0Bt0CH42NEf1Q
C程序中10个与内存有关的常见错误
https://mp.weixin.qq.com/s/zMJZa2mkagzcrGvLBdaYKQ
【网络原理】TCP协议如何实现可靠传输(后包先置处理)
https://blog.csdn.net/weixin_64916311/article/details/131151053
python教程
python3——https://www.runoob.com/python3/python3-tutorial.html
python2——https://www.runoob.com/python/python-tutorial.html
在有C语言的基础上,快速学习python(C语言转战python)(python3)
send_data = [0xA4,0x03,0x08,0x23,0xD2] #需要发送的串口包
Pyhon:串口应用及数据解析过程
python+嵌入式——串口通信篇(收发解包)
UML时序图绘制
https://blog.csdn.net/Edraw_Max/article/details/115396739
python session和cookie使用
https://blog.csdn.net/weiyi47/article/details/131643458
MQTT 自动重连最佳实践
https://mp.weixin.qq.com/s/IcIYg3E8CLNi9AojvOFlnA
pthread_cancel函数:避免踩坑
Thread线程学习(3) 了解Linux线程中的pthread_cancel()函数
Linux线程(3)——pthread_cancel()取消一个线程
linux线程发生段错误,怎么让整个进程退出,pthread_cancel,pthread_killall 段错误
thread变量是全局变量,应该是被自动初始化为零的。也就是说pthread_cancel(0),会引起段错误
线程取消(pthread_cancel)
如果线程处于无限循环中,且循环体内没有执行至取消点的必然路径,则线程无法由外部其他线程的取消请求而终止。因此在这样的循环体的必经路径上应该加入pthread_testcancel()调用.
线程终止的清理工作,成对调用函数:
void pthread_cleanup_push(void (*routine) (void *), void *arg)
void pthread_cleanup_pop(int execute)
线程的取消与清理
如果没有取消点,手动设置一个:void pthread_testcancel(void);
当线程非正常终止,需要清理一些资源。
void pthread_cleanup_push(void (*routine) (void *), void *arg)
void pthread_cleanup_pop(int execute)
举了两个例子:
1、被pthread_cancel取消掉
2、执行pthread_exit
线程退出函数pthread_cancel() 采坑点
博文评论:那请问有没有什么方法能够直接杀死呢,而不是等待执行到系统调用
用pthread_setcanceltype这个函数设置取消方式
线程正常终止pthread_exit,pthread_join,pthread_kill,pthread_cancel,sigwait,sigaddset
理解C中函数调用及内存释放:
malloc 动态分配内存,函数调用结束不会被释放
Malloc内存泄露和内存越界问题的研究:
内存泄露的原因很多,有malloc了内存没free的,有open了文件没close的,有创建了socket和sem没释放的等待。
pthread_join()详解及实验:
阻塞状态,直到B线程结束后,A线程才会继续执行下去
它的内存空间也会被释放(如果被调用线程是非分离的),被释放的内存空间仅仅是系统空间,你必须手动清除程序分配的空间,比如 malloc() 分配的空间
不同接地方式的区分:功率地,逻辑地,数字地,模拟地等
https://blog.csdn.net/qq_32515081/article/details/117195708
C语言——动态内存函数(malloc、calloc、realloc、free)
https://blog.csdn.net/plj521/article/details/132264625
STM32上电启动过程分析
https://mp.weixin.qq.com/s/MtHPJUzMuTZr0NeWpE1rGQ
乐鑫环境搭建视频
命令行安装:下载乐鑫官网一键安装工具离线包(1G左右大小,包含所有编译所需组件,非常方便),安装前勾选所有选项(支持乐鑫所有的芯片类型及驱动),一直点击同意(期间会检查电脑环境,需要应用修复时点击一下应用修复),打开esp-idf CMD(或者PowerShell) 终端显示 idf.py build 表示安装成功,如下图。
注意:要和其他开发的小伙伴安装一样版本的,我们安装4.4.3版本,不然编译会提示和官方库数据类型不匹配、没有相应头文件等错误。
使用:第一次先在esp-idf cmd终端里编译一下,执行指令 code . 跳到vscode里打开代码(图形IDE,也就是说命令行安装也能调出图形IDE功能),选择串口号,自动跳出工程路径,点击一下,点击下面小火苗编译、烧录、监测。
idf.py set-target esp32s3 // 切换芯片环境,视频讲要到example路径下切换
idf.py menuconfig // 图形化配置
idf.py build // 编译,生成的bin文件在build文件夹
idf.py flash -p COM86 // 烧录
idf.py monitor -p COM86 // 监测(板子会重启一次)
idf.py flash monitor -p COM86 // 一键烧录、监测
ctrl + ] // 退出
idf.py erase-flash build flash monitor -p COM87 // NVS保存的数据也擦除了
code . //调出vscode图形IDE 根目录下输入,这样能打开所有代码 最好到具体的项目下打开,这样才能正常使用图形IDE
ctrl+shift+p //vscode调出命令行
>ESP-IDF: new project //通过命令行创建项目
>>ESP-IDF:add vscode configuration folder//生成.vscode,里面c_cpp_properties.json给出所有头文件路径(解决在其他路径下创建工程找不到头文件的问题)
menuconfig //点击vscode底部小齿轮,设置参数最终保存到sdkconfig文件里,比如修改wifi账号密码
//直接改sdkconfig文件不行,执行build会覆盖掉。可以把配置信息拷贝到下面的sdkconfig.default文件里,比如wifi账号密码,这样开机就默认使用这里的配置
杨奉武物联网博客解读
- 1、模组内部支持SSL和MQTT:直接调用AT指令AT+QSSLOPEN,加解密和应用层MQTT协议均由模组内部实现。
- 2、模组内部不支持SSL和MQTT:需要MCU移植mbedtls、mqtt等库,先调用TCP的AT指令: AT+QIOPEN(创建了一个TCP连接) ,mqtt由单片机移植的mqtt库实现,相当于模组实现了传输层, AT+QIOPEN等同于Linux创建 socket 连接,加解密由mcu库mbedtls实现,MQTT由mcu移植的库实现。
- 3、AWS那套库在linux系统里也是集成了coremqtt、corehttp、corejson等,底层调用的socket;在乐鑫模组freertos系统里也是集成了coremqtt、corehttp、corejson等,底层调用的lwip。
EC200(直接使用模组的AT+SSL指令,模组内部支持SSL,不用额外再移植Mbedtls 模组不支持AT指令版mqtt 所以mcu移植mqtt库)
https://www.cnblogs.com/yangfengwu/p/16317233.html
数据处理思想和程序架构
https://www.cnblogs.com/yangfengwu/category/1566194.html?page=2
SSL(不验证证书):
https://www.cnblogs.com/yangfengwu/p/13844529.html 移植mbedtls库 完善 时间戳 随机数 SSL初始化握手 轮询 发送和接收接口
https://www.cnblogs.com/yangfengwu/p/14451086.html 日志打印服务器协商加密密码
https://www.cnblogs.com/yangfengwu/p/14599391.html
BC260Y内部没有做上SSL(模组里没有集成密码库),所以使用单片机控制模组连接上TCP服务器,然后再利用Mbedtls包实现SSL. 其他的也都是
记住一句话:证书只是验证是不是真实的服务器,最终二者把数据经过对称加密然后再通过TCP传输.
详细介绍了调用逻辑
https://www.cnblogs.com/yangfengwu/p/14599788.html
https://www.cnblogs.com/yangfengwu/p/16006777.html
https://www.cnblogs.com/yangfengwu/p/16098224.html 阿里云SSL
证书(双向认证,验证服务器证书)
https://www.cnblogs.com/yangfengwu/p/14615465.html
一型一密
https://www.cnblogs.com/yangfengwu/p/15873222.html
https://www.cnblogs.com/yangfengwu/p/14618186.html
https://www.cnblogs.com/yangfengwu/p/15873604.html
https://www.cnblogs.com/yangfengwu/p/16132390.html
基本控制
https://www.cnblogs.com/yangfengwu/p/14134939.html 整体架构
https://www.cnblogs.com/yangfengwu/p/14141928.html SSL发送方式AT介绍
规则引擎(写点SQL)
https://www.cnblogs.com/yangfengwu/p/14651110.html
http/https下载
自建物联网
https://www.cnblogs.com/yangfengwu/p/15906937.html http回复:Content-Range: bytes 0-1023/32500 接收到足够的数据:32500
https://www.cnblogs.com/yangfengwu/p/15911008.html 使用mbedtls(SSL调用逻辑介绍) get请求里有range 0-2047
https://www.cnblogs.com/yangfengwu/p/16226835.html 使用mbedtls SSL握手
阿里云
https://www.cnblogs.com/yangfengwu/p/16275417.html
https://www.cnblogs.com/yangfengwu/p/16280396.html 移植了mbedtls, 让设备走SSL去注册设备
https://www.cnblogs.com/yangfengwu/p/17171524.html BootLoader程序移植了mbedtls,可以使用https下载程序
https://www.cnblogs.com/yangfengwu/p/17171366.html http下载 range 0-3071
ESA2GJK1DH1K基础篇: 移植MQTT底层包到自己的项目(V0.1) 你设置的心跳包多少时间,你就多少时间发送一次心跳包! 连接、订阅、发布、解析 发送C0 00 服务器回复D0 00
https://www.cnblogs.com/yangfengwu/p/11766867.html
单片机移植MQTT底层包 如果自己的网络模块并非透传模式,需要加入一部分AT指令
https://www.cnblogs.com/yangfengwu/p/14615489.html
MQTT报文(只要TCP连接了,然后知道了MQTT的协议,,,,直接就可以用TCP来当做MQTT来使用了)
https://www.cnblogs.com/yangfengwu/p/9124299.html
心跳超时 = 1.5 * 心跳时间
https://www.cnblogs.com/yangfengwu/p/11241776.html
Wi-Fi模块连接TCP后便是透传模式 客户端发送的心跳包数据是 C0 00 服务器返回的是 D0 00
mqtt连接 订阅 发送 处理 如果一直有数据交互,则延迟心跳发送
官方提供的MQTT库,所有的数据判断处理都是利用该函数
https://www.cnblogs.com/yangfengwu/p/11760590.html
发送连接mqtt协议
https://www.cnblogs.com/yangfengwu/p/11768916.html
LWIP
https://www.cnblogs.com/yangfengwu/p/12393478.html
所以我才知道,WIFI模块里面写的HTTP是把所有分段过来的数据全部接收到一个数组里面再调用回调....然而就会造成内存不足
用TCP实现HTTP的时候是接收一段打印出来一段,并不是把所有的数据全部放到一个数组里面,然后打印.....
https://www.cnblogs.com/yangfengwu/p/10360618.html
本程序发送心跳包,发送温湿度,返回控制数据这三个发送是单独的,有可能凑到一起发.
由于本身程序就是复杂性的程序,所以这节程序没有使用中断发送,没有使用环形队列发送,为了避免多条消息可能凑到一起发
设置成透传模式
https://www.cnblogs.com/yangfengwu/p/11768951.html
C语言的编译过程详解
https://zhuanlan.zhihu.com/p/558783902?utm_source=wechat_session&utm_medium=social&s_r=0