【BC26】-03-对接阿里云
MQTT 部分MQTT发送过程
AT+CGPADDR,查询IP,获取到OK表示BC26状态正常
AT+QMTCFG="aliauth",0,"gg43bimZeb9","Lighting","2790aa518d49f0ed3955254f693c0c13",配置阿里云
AT+QMTOPEN=0,“iot-as-mqtt.cn-shanghai.aliyuncs.com”,1883连接阿里云,在连接完成后马上需要用5发送连接设备指令,否者会自动断开
AT+QMTCONN=0,"Lighting",连接设备,这里的lighting是阿里云自己定义的设备名称
AT+QMTPUB=0,0,0,0,"/sys/a1tW6nsMu2w/BC28/thing/event/property/post",发布指令
{params:{RoomHumidity:58.8}},具体数据
MQTT接收过程
AT+QMTSUB=0,1,"/a ...
【CAG_SLAM】-03-Padding-Modules
功能描述
对输入的图像信号进行裁边和填充0的操作,裁边的具体操作为,保持裁边后的图像的可以被分成整数个24*24(像素为单位)的block,裁边选择的方向是上边和右边的部分;裁边完成后,将图像四周用0进行padding,宽度为21像素。
每次进行像素的输入是通过每次输入4个像素(4*8bit),一直输入完所有的像素,再进行裁边的操作。图像数据的大小可以提前知道,例如(1241*376,1242*375)两种情况。因此,可以等到所有数据输入完成再进行裁边,或者边输入,边裁边输出。
输入包括图像的大小(宽和高),fast_busy是否繁忙,若繁忙,则需要等待,还有一个有效的valid_i信号;
输出包括本模块的busy和valid,以及每次四个像素进行输出
实现方法
知道了图像的长和宽,就可以统计输入理论上需要的周期,在这个周期中,就可以采取计数器的方法,对其当前的信号计数从而确定坐标的位置(可以分别进行行、列坐标的计数),同时,有两种方式进行输出,一种是通过用寄存器数组记录下所有的数据,然后,再将这些数据最后一起输出;另一种方式是,判断当前坐标是否应该出现再输出的信号中,如果出现在输 ...
【札记】无题
一个小问题以前的经验总结中,可能重点放在了改掉坏毛病上面,但是最近发现,可能坚持一个好习惯的效果更好。锻炼虽然会用一点时间,但是可以显著地提高2-3倍的效率,这样是非常划算的交易。
【Verilog学习】-07-testbench
testbenchtextbench的写法中,主要就是对信号进行初始化(时钟,输入数据等),时钟信号的生成。这里这介绍一些基础的用法。在后面,要结合python写一下脚本对结果进行一些比对等。
基础写法这个是延时的符号,表示延时多久才进行操作,只能在仿真中使用,没有对应实际的电路。
产生时钟^1方法112345678910module top_module ( ); parameter clk_period = 10; reg clk; initial begin clk = 0; forever #(clk_period/2) clk = ~clk; end dut dut_inst1(clk);endmodule
方法2123456789module top_module ( ); parameter clk_period = 10; reg clk; initial begin clk = 0; end always #(clk_period/2) clk ...
【BC26】-02-功能完善
功能描述
本次项目需要完成的BC26收发模块的功能:
整体:能够通过单片机用UART2和BC26模块进行通信,能够将数据收发传送到BC26模块并发送出去。
BC26模块的初始化
BC26模块进行数据的发送
BC26模块进行数据的接收(中断?)
接口定义
status BC26_Init(void); 进行模块的初始化(原来的程序有一点冗长,主要调试信息太多了,做了一些简化)
status BC26_SendMessageUDP(char *); 通过UDP方式进行数据的发送
status BC26_ReceiveMessageUDP(void); 通过UDP方式进行数据的接收(通过向上位机打印来验证)
编程思路
将BC的接口定义完成之后,为了简化接收的步骤,封装一个串口发送和接收字符串的函数。
然后将原来的函数进行一波简化应该就可以用了。
编程实现
遇到的第一个问题是在封装了发送字符串的函数后,没有办法进行系统时钟的设置,在设置的时候直接进入了Error_Handle();。
解决方法:重新启动一下这个CubeMX来进行重置,然后就可以work了,不太清楚是哪里出现了问题,应该 ...
【蓝桥杯】-00-开发板
蓝桥杯嵌入式比赛. -基础入门视频教程(G4版)百度网盘链接:https://pan.baidu.com/s/1DGowydn5Yki7p3q0tJG5XA提取码: QKRM阿里云盘链接: https://www.aliyundrive.com/s/ZuB7FzFAfmx请尽快下载阅读”必读须知”,严格按照“必读须知”进行观看视频教程的操作。开发板资料包:蓝桥杯嵌入式比赛–开发板资料包(G4版)百度网盘链接: https://pan.baidu.com/s/ 1DkCWprR_-|Vf4puezfG8vQ提取码:QDG4阿里云盘链接: https://www.aliyundrive.com/s/ao4XHgUZyDp
【BC26】-01-代码整合及其规范
代码风格和规范关于C语言的这个代码风格和规范的问题,其实在很早就一直困扰着我。没有系统性的归纳过。今天蹭着这机会就来系统地梳理一下。
首先是关于这个头文件的问题:网上关于这个头文件的说法是,头文件好不要包含其他的头文件,如果是源文件需要的话,直接再源文件中进行包含,而不是在头文件中包含,如果是头文件中,需要使用到其他的头文件中的结构体的定义等的话,则就只是包含相关的头文件。然后在源文件中,最好是只使用需要用到的模块的头文件。不要用一个includes.h(但是我还是感觉这样的做法比较方便。。。)
关于变量命名的问题:这里我应该都是比较规范地进行命名的,但是还是需要注意一点就是不用的变量或者可以省略的变量尽量都将其删除了。
关于函数命名的问题:我看网上进行函数命名的时候有下划线的方式也有大小写的方式,这里我还是统一用大小写的方式,但是如果是相关的名词全是大写的话,我就再用下划线区分一下(例如在写这种LED_Init)其他就没有什么大问题了。
代码规范只是一个需要长期培养的一个习惯,只要平时注意一下,有些问题就总结一下。
模块化的定义现在出现了一个新的层级,就是模块。
以前的工程里面我 ...
【CPP】-00-基本概念学习
C++学习其实也是一直拖了很久的一件事情,在看这些基础知识的时候,我也有了一些新的体会。尤其是在使用了大量的C来编写嵌入式代码之后,我觉得很重要的一点就是要有良好的代码习惯和对于一些概念的深刻理解,才能够少出bug或者是能够及时地发现bug。
类和对象类和对象的概念可以类比一下C中的结构体数据类型的定义和结构体的实例化。
类就可以是一种数据类型,它只是用来辅助我们进行相关程序设计的,并不会在内存中生成实际的空间来供我们使用;而对象就是相当于类的实例化(这样就占用了一定的内存空间)。
C++的类和对象中,也多了许多C中没有的概念和特性,具体的内容请详见C语言中文网[^1],这里我仅记录一下我遇到的一些问题和认为重要的东西。
参考资料[^1]: C++类和对象(class和object) (biancheng.net)
【rhino】-01-建模频谱灯外壳
这里的这个项目是我从这学期开始,一直鸽到现在才弄的一个东西。这个频谱灯的电路和程序方面其实在去年的10月就已经调通了,但是呢,这个外壳一直没有设计。
这里就有得用上一些大一学过的一些工图方面的知识来解决这些问题了。
尺寸分析尺寸分析主要是需要对频谱灯的电路板的定位孔进行一个测量,然后再外壳相应的位置预留固定孔即可。
在AD中进行尺寸的测量会遇到一些问题,最主要的就是选点不知道为什么选不准,具体的例子如下:
这里的想要测量的量是两个开关之间的距离,但是没有办法锁定到中见到中间(P+D+L的方式)
但是,可以使用到P+D+D的方式可以但又是没有这种可以拉出来的效果。这样就麻烦了。
网上没有具体的解决方案,这里就只好暂且留一下这个问题了。
下面是测量好的整个板子的尺寸信息,通过这个尺寸信息,将会进行相关的开槽了打孔。
绘制外壳平面图绘制的外壳也是在原来的基础上进行相应的改动,原来的外壳信息如下:
【rhino】-00-建模勺子
建模勺子是我做的第一个rhino的项目。也是直接照着网上照着步骤抄一下,中间遇到的问题也比较少,然后现在主要要做的事情就是整理一下中间遇到的问题。
建模基础的知识这里学的一些基础的操作和方法,我主要是照着这一个UP主的视屏练习了一下:
RHINO建模教程基础(已完结)_哔哩哔哩_bilibili
这里面呢主要是对一些基础的知识(点、线、面等)进行了归纳和总结,也对一些基础的线面的操作做了一些讲解,比较清楚。
实例接下来就是实例了,照着下面的这一个例子,比较轻松地完成了任务。
【Rhino7】新手案例★勺子的几种建模方法练习_哔哩哔哩_bilibili