在开始主题之前,先介绍一个刷固件工具。这个工具在idf中是集成的,不过,乐鑫也单独发布了这个工具——esptool。下载链接:Releases·espressif/esptool·GitHub。这货是用Python写的,只是封装成了exe,方便直接运行罢了。 在使用时,需要-p参数指定串口号,如COM15,-b指定波特率(可以省略)。下面咱们尝试用flash_id指令来获取ESP32的Flash信息。 esptool-pcom13flash_id 输出结果如下: 老周有很多块esp开发板,如你所见,这块板的flash是16MB的。请记住这个容量,待会刷nanoCLR时它会出事故。咱们再看...

  omQ9qq6Upg4c   17小时前   5   0   0 嵌入式

在上一篇中,老周用.NETNanoFramework给大伙伴们演示了WS2812灯带的控制,包括用SPI和红外RMT的方式。利用RMT是一个很机灵的方案,不过,可能很多大伙伴对ESP32的RMT不是很熟悉。除了乐鑫自己的文档,没几个人写过相关的水文,可见这里头空白的水市场很充足,老周一时手痒,就决定再水一篇博文。 不管你有没有做过物联网项目,只要你有关注,你就会发现,当今时尚流行忽悠不擦嘴巴。许多教程就拿个MicroPython或者Arduino,贴几行代码,然后叫你烧录进去看效果。可是,效果看完了,你知道了啥?你学到了啥?你知道这里头做了啥?全TM不知。做教程的人只管忽悠,然后就没下文了。这...

  omQ9qq6Upg4c   9天前   14   0   0 嵌入式

地球人皆知,许多物联网教程作者的心中都深爱着一灯大师,所以第一个例程总喜欢点灯,高级一点的会来个“一闪一闪亮晶晶”。老周今天要扯的也是和灯有关的,但不单纯地点个灯,那样实在不好玩,缺乏乐趣。老周打算舞个龙灯,哦不,是用LED彩色灯带给伙伴们整点炫酷乐子。 说到这LED彩灯,咱们常见到的有两类: 1、一卷一卷的灯带,灯带是软的,底部有背胶,可以随意贴(贴电脑机箱,贴储物柜,贴手办展示盒……); 2、点阵屏,其实跟灯带一个样,只是有个框架,做成矩阵。如33、44等。 驱动IC一般是WS2812,此货体积甚小,便于寄生于每个灯珠内。所以,每个LED灯珠都可以单独控制。而且WS2812允许你把灯珠串联...

  omQ9qq6Upg4c   13天前   25   0   0 .NET

老周在几个世纪前曾写过树莓派相关的iOT水文,之所以没写NanoFramework相关的内容,是因为那时候这货还不成熟,可玩性不高。不过,这货现在已经相对完善,老周都把它用在项目上了——第一个是自制的智能插座,这个某宝上50多块可以买到,搜“esp32插座”就能找到。一种是86型盒子的,带屏幕,背部可以安装继电器,需要自己接线(也不难,把线削出铜丝,然后怼进去,上紧螺丝就行);另一种就类似公牛的那种,无屏幕,一个三脚插孔,不需要引线,程序测试好后直接插电用。第二个给打工仔们用的,买了一块带电池接口的ESP32板,外壳是他们自己做的,主要是远程控制,不过那个老周做了两个版本,一个是NanoFra...

  omQ9qq6Upg4c   16天前   27   0   0 .NET

上一篇中,老周简单肤浅地介绍了XInputAPI的使用,并模拟了鼠标移动,左、右键单击和滚轮。本篇,咱们用.NET代码来完成相同的效果。 说起来也是倒霉,博文写了一半,电脑忽然断电了。不知道什么原因,可能是UPS电源出故障。重新开机进来一看,博文没有自动保存到草稿箱。我记得以前是有自动保存这功能的。很无奈,只好重写了。 在dll导入的时,容易出问题的是INPUT结构体,因为这货有union成员。不知各位还记不记得。 typedefstructtagINPUT{ DWORDtype; union { MOUSEINPUTmi; KEYBDINPUTki; HARDWAREINPUThi; }...

  omQ9qq6Upg4c   2024年03月03日   36   0   0 .NET

老周一般很少玩游戏,在某宝上买了一堆散件,计划在过年期间自己做个机械臂耍耍。头脑中划过一道紫蓝色的闪电,想起用游戏手柄来控制机械臂。机械臂是由树莓派(大草莓)负责控制,然后客户端通过SocketUDP来发送信号。优先考虑在PC和手机上测试,就顺便折腾一下XInputAPI。当然,读取手柄数据有多套API。本文老周先介绍XInput方案,后面再介绍Windows.Gaming.Input方案。Windows.Gaming.Input是UWPAPI,也可以在.NET项目中使用。.NET程序适合用这套API。 XInput中的X指的就是“西瓜手柄”,哦不,是XBox手柄。当然了,并不局限于XB手柄,...

  omQ9qq6Upg4c   2024年02月19日   43   0   0 C语言

由于两个月的奋战,导致很久没更新了。就是上回老周说的那个产线和机械手搬货的项目,好不容易等到工厂放假了,我就偷偷乐了。当然也过年了,老周先给大伙伴们拜年了,P话不多讲,就祝大家身体健康、生活愉快。其实生活和健康是密不可分的,想活得好,就得健康。包括身体健康、思想健康、心理健康、精神健康。不能以为我无病无痛就很健康,你起码要全方位健康。 不管你的工作是什么,忙或者不忙,报酬高或低,但是,人,总得活,总得过日子。咱们最好多给自己点福利,多整点可以自娱自乐的东西,这就是生活。下棋、打游戏、绘画、书法、钓鱼、飙车、唢呐……不管玩点啥,只要积极正向的就好,可以大大降低得抑郁症、高血压的机率;可以减少70...

  omQ9qq6Upg4c   2024年02月19日   75   0   0 .NET

一个多月前接手了一个产线机器人项目,上位机以读写寄存器的方式控制机器人,服务器就是用ASP.NETCore写的WebAPI。由于前一位开发者写的代码质量问题,导致上位机需要16秒才能启动。经过我近一个月的改造,除了保留业务逻辑代码,其他的基本重写。如今上位机的启动时间在网络状态良好的条件下可以秒启动。原上位机启动慢的原因: 1、启动时使用同步方式访问WebAPI,在网络较弱时需要等待很长时间。我改为导步请求,并且不等待请求结果,直接显示窗口;如果前面的请求失败,在窗口显示后再次发出异步请求,并且不等待。如果再失败才提示用户。 2、原项目在Main方式处就连接PLC,而产线的PLC压根就没插电源...

  omQ9qq6Upg4c   2024年01月05日   13   0   0 .NET

在多线程编程中,如果每个线程的运行不是完全独立的。那么,一个线程执行到某个时刻需要知道其他线程发生了什么。嗯,这就是所谓线程同步。同步事件对象(XXXEvent)有两种行为: 1、等待。线程在此时会暂停运行,等待其他线程发出信号才继续(等你约); 2、发出信号。当前线程发出信号,其他正在等待线程收到信号后继续运行(我约你)。 从前,小明、小伟、小更、小红、小黄计划到野外去烤鱼吃。但他们只确定市郊东南方向的一片区域,并不能保证具体哪个地点适合烧烤。于是,他们商量好,大家同时从家里出发。小明离那里比较近,他先去考察一下;其他人到了东南郊后集合,等小明的消息。小明考察完毕,向大家群发消息说明选定的地...

  omQ9qq6Upg4c   2023年12月31日   45   0   0 .NET

MVC的过滤器(Filters)也翻译为“筛选器”。但是老周更喜欢翻译为“过滤器”,意思上更好理解。 既然都叫过滤器了,就是在MVC的操作方法调用前后进行特殊处理的类型。比如: a、此调用是否已授权? b、在模型绑定之前要不要修改数据源?(可能含有儿童不宜的数据) c、在调用MVC方法前要不要改一改输入参数?在MVC方法调用之后要不要处理一下结果(加点味精,进一步调味) d、发生异常后怎么处理? 过滤器可解决上面一堆提问。 在ASP.NETCore的MVC框架中,所有过滤器都实现共同接口 IFilterMetadata。该接口空空如也,未定义任何成员。说白了,它的用处是作为一种“记号...

  omQ9qq6Upg4c   2023年12月31日   18   0   0 .NET

前面老周给大伙伴们演示了过滤器的运行流程,大伙只需要知道下面知识点即可: 1、过滤器分为授权过滤、资源访问过滤、操作方法(Action)过滤、结果过滤、异常过滤、终结点过滤。上一次咱们没有说异常过滤和终结点过滤,不过老周后面会说的。对这些过滤器,你有印象就行了。 2、所有过滤器接口都有同步版本和异步版本。为了让伙伴不要学得太累,咱们暂时只说同步版本的。 3、过滤器的应用可以分为全局和局部。全局先运行,局部后运行。全局在应用程序初始化时配置,局部用特性类来配置。 4、实际应用中,我们不需要实现所有过滤器接口,需要啥就实现啥即可。比如,你想在Action调用后修改一些东西,那实现 IAc...

  omQ9qq6Upg4c   2023年12月31日   18   0   0 .NET

老周是一个不喜欢做界面的码农,所以很多时候能用控制台交互就用控制台交互,既方便又占资源少。有大伙伴可能会说,控制台全靠打字,不好交互。那不一定的,像一些选项类的交互,可以用键盘按键(如方向键),可比用鼠标快得多。当然了,要是要触控的话,是不太好用,只能做UI了。 关于控制台交互,大伙伴们也许见得最多的是进度条,就是输出一行但末尾不加\n,而是用\r回到行首,然后输出新的内容,这样就做出进度条了。不过这种方法永远只能修改最后一行文本。 于是,有人想出了第二种方案——把要输出的文本存起来(用二维数组,啥的都行),每次更新输出时把屏幕内容清空重新输出。这就类似于窗口的刷新功能。缺点是文本多的时候会闪...

  omQ9qq6Upg4c   2023年12月31日   44   0   0 .NET

老周是一个不喜欢做界面的码农,所以很多时候能用控制台交互就用控制台交互,既方便又占资源少。有大伙伴可能会说,控制台全靠打字,不好交互。那不一定的,像一些选项类的交互,可以用键盘按键(如方向键),可比用鼠标快得多。当然了,要是要触控的话,是不太好用,只能做UI了。 关于控制台交互,大伙伴们也许见得最多的是进度条,就是输出一行但末尾不加\n,而是用\r回到行首,然后输出新的内容,这样就做出进度条了。不过这种方法永远只能修改最后一行文本。 于是,有人想出了第二种方案——把要输出的文本存起来(用二维数组,啥的都行),每次更新输出时把屏幕内容清空重新输出。这就类似于窗口的刷新功能。缺点是文本多的时候会闪...

  omQ9qq6Upg4c   2023年12月22日   16   0   0 .NET

前面老周给大伙伴们演示了过滤器的运行流程,大伙只需要知道下面知识点即可: 1、过滤器分为授权过滤、资源访问过滤、操作方法(Action)过滤、结果过滤、异常过滤、终结点过滤。上一次咱们没有说异常过滤和终结点过滤,不过老周后面会说的。对这些过滤器,你有印象就行了。 2、所有过滤器接口都有同步版本和异步版本。为了让伙伴不要学得太累,咱们暂时只说同步版本的。 3、过滤器的应用可以分为全局和局部。全局先运行,局部后运行。全局在应用程序初始化时配置,局部用特性类来配置。 4、实际应用中,我们不需要实现所有过滤器接口,需要啥就实现啥即可。比如,你想在Action调用后修改一些东西,那实现 IAc...

  omQ9qq6Upg4c   2023年12月03日   16   0   0 .NET

MVC的过滤器(Filters)也翻译为“筛选器”。但是老周更喜欢翻译为“过滤器”,意思上更好理解。 既然都叫过滤器了,就是在MVC的操作方法调用前后进行特殊处理的类型。比如: a、此调用是否已授权? b、在模型绑定之前要不要修改数据源?(可能含有儿童不宜的数据) c、在调用MVC方法前要不要改一改输入参数?在MVC方法调用之后要不要处理一下结果(加点味精,进一步调味) d、发生异常后怎么处理? 过滤器可解决上面一堆提问。 在ASP.NETCore的MVC框架中,所有过滤器都实现共同接口 IFilterMetadata。该接口空空如也,未定义任何成员。说白了,它的用处是作为一种“记号...

  omQ9qq6Upg4c   2023年11月27日   17   0   0 .NET

在多线程编程中,如果每个线程的运行不是完全独立的。那么,一个线程执行到某个时刻需要知道其他线程发生了什么。嗯,这就是所谓线程同步。同步事件对象(XXXEvent)有两种行为: 1、等待。线程在此时会暂停运行,等待其他线程发出信号才继续(等你约); 2、发出信号。当前线程发出信号,其他正在等待线程收到信号后继续运行(我约你)。 从前,小明、小伟、小更、小红、小黄计划到野外去烤鱼吃。但他们只确定市郊东南方向的一片区域,并不能保证具体哪个地点适合烧烤。于是,他们商量好,大家同时从家里出发。小明离那里比较近,他先去考察一下;其他人到了东南郊后集合,等小明的消息。小明考察完毕,向大家群发消息说明选定的地...

  omQ9qq6Upg4c   2023年11月12日   22   0   0 .NET

经过版本更新,MiniAPI的功能逐步完善,早期支持得不太好的miniAPI现在许多特性都可以用了,比如灰常重要的依赖注入。 咱们先来个相当简单的注入测试。来,定义一个服务类,为了偷懒,老周这里就不使用接口+实现类的方式了。 publicclassMyService:IDisposable { publicMyService() { Console.WriteLine($"{nameof(MyService)}隆重开业"); } publicvoidDispose() { Console.WriteLine($"{nameof(MyService)}即将散伙"); } publicvoi...

  omQ9qq6Upg4c   2023年11月06日   36   0   0 .NET

前面一些文章,老周简单介绍了在Qt中使用列表模型的方法。很明显,使用ItemModel在许多时候还是挺麻烦的——要先建模型,再放数据,最后才构建视图。为了简化这些骚操作,Qt提供了几个便捷类。今天咱们逐个看看。 一、QListWidget  这厮对应的ListView,用来显示简单的列表。要添加列表项,此类有两个方法 voidaddItem(constQString&label); voidaddItem(QListWidgetItemitem); voidaddItems(constQStringList&labels); 前两个方法是调用一次就添加一个列表项...

  omQ9qq6Upg4c   2023年11月02日   25   0   0 C++

前面一些文章,老周简单介绍了在Qt中使用列表模型的方法。很明显,使用ItemModel在许多时候还是挺麻烦的——要先建模型,再放数据,最后才构建视图。为了简化这些骚操作,Qt提供了几个便捷类。今天咱们逐个看看。 一、QListWidget  这厮对应的ListView,用来显示简单的列表。要添加列表项,此类有两个方法 voidaddItem(constQString&label); voidaddItem(QListWidgetItemitem); voidaddItems(constQStringList&labels); 前两个方法是调用一次就添加一个列表项...

  omQ9qq6Upg4c   2023年11月02日   53   0   0 C++

原来的水文标题是“用VSCode搞Qt6”,想想还是直接改为“Qt6”,反正这个用不用VSCode也能搞。虽然我知道大伙伴们都很讨厌CMake,但毕竟这厮几乎成了C的玩家规范了。Qt也算识大体,支持用CMake来构建程序。所以,只要你用的是能写C的工具,理论上都能搞Qt。 创建应用程序界面的时候,我们一般会选用QWidget以及其子类的。不过,在Gui模块中,有一个QWindow类,干吗用的呢?写个程序试试看。 include<QGuiApplication> include<QWindow> intmain(intargc,charargv) { //一定要先创建...

  omQ9qq6Upg4c   2023年11月02日   37   0   0 C++
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~