当前位置: 首页 > news >正文

使用文心一言等智能工具指数级提升嵌入式/物联网(M5Atom/ESP32)和机器人操作系统(ROS1/ROS2)学习研究和开发效率

以M5AtomS3为例,博客撰写效率提升10倍以上:

0. Linux环境Arduino IDE中配置ATOM S3_zhangrelay的博客-CSDN博客

1. M5ATOMS3基础01按键_zhangrelay的博客-CSDN博客

2. M5ATOMS3基础02传感器MPU6886_zhangrelay的博客-CSDN博客

3. M5ATOMS3基础03给ROS1发一个问候(rosserial)_zhangrelay的博客-CSDN博客

4. M5ATOMS3基础04给ROS2发一个问候(micro-ROS)_zhangrelay的博客-CSDN博客


基础内容

嵌入式通常就是接口IO,input/output,对应于机器人操作系统, 升级了名字,交互,pub/sub。

这其实都是一类东西,学会了一种,其他相似内容看一言就会了。

其实底层代码就是一个驱动,将硬件设备激活使用起来。完成0-5,基本就入门ESP32了。

智能助攻

有一段代码,可能是别人的,也可能是之前的,需要移植到M5AtomS3中。

可以将代码提供给AI,然后告诉它一步一步应该如何做,大部分代码移植需要修改的部分不多。

void setup() {// initialize digital pin LED_BUILTIN as an output.pinMode(LED_BUILTIN, OUTPUT);
}// the loop function runs over and over again forever
void loop() {digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)delay(1000);                       // wait for a seconddigitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOWdelay(1000);                       // wait for a second
}

这段代码是使用Arduino编程语言编写的,用于控制一个LED灯的开关。以下是代码的功能解释:

  1. void setup()函数是初始化函数,在程序开始执行时被调用一次。在这个函数中,通过pinMode(LED_BUILTIN, OUTPUT)将引脚LED_BUILTin设置为输出模式,以便控制LED灯的开关。
  2. void loop()函数是主循环函数,一旦程序开始执行,它将会一直循环执行。在这个函数中,通过digitalWrite(LED_BUILTIN, HIGH)将LED_BUILTin引脚输出高电平(电压),从而使LED灯亮起来。
  3. delay(1000)函数用于延迟程序执行1000毫秒(1秒)。因此,在LED灯亮起来之后,程序会暂停1秒钟。
  4. 然后,通过digitalWrite(LED_BUILTIN, LOW)将LED_BUILTin引脚输出低电平(电压),从而使LED灯熄灭。
  5. 再次使用delay(1000)函数延迟程序执行1000毫秒(1秒)。

因此,这段代码的功能是使LED灯以1秒的频率闪烁,即LED灯亮1秒,然后灭1秒,一直循环下去。

借助AI分析和理解代码。

这段代码是使用M5AtomS3库来控制一个嵌入式系统上的LED灯,并通过循环改变LED的颜色。

首先,在setup()函数中,调用了M5.begin()函数来初始化M5AtomS3Lite。其中的参数设置如下:

M5.begin(false, true, false, true);

接下来,通过USBSerial.println()函数输出一条信息:"Pls Press Btn change color",提示用户按下按钮来改变颜色。

然后,在loop()函数中,通过循环不断地改变LED的颜色。具体操作如下:

  1. 使用M5.dis.drawpix()函数将颜色值0xff0000绘制到一个像素点上,表示红色。
  2. 通过M5.dis.show()函数将绘制结果显示在屏幕上。
  3. 使用delay()函数延迟500毫秒。
  4. 重复上述步骤,依次将颜色值0x00ff00(绿色)和0x0000ff(蓝色)绘制到同一个像素点上,并显示在屏幕上。
  5. 再次使用delay()函数延迟500毫秒。

这个循环会不断地重复执行,导致LED灯不断地改变颜色。

让AI对比这两段代码:

两段代码在功能上是相似的,都是控制LED灯的闪烁。但是,它们的实现方式略有不同。

首先,代码1使用的是Arduino编程语言,而代码2使用的是M5AtomS3库。这导致了两段代码的初始化和循环方式上的差异。

在代码1中,使用了pinMode()函数来初始化LED引脚为输出模式,然后使用digitalWrite()函数来控制LED的开关。循环部分使用了loop()函数和一个延迟函数delay()来实现LED的闪烁效果。

在代码2中,使用了M5AtomS3库的M5.begin()函数来初始化M5AtomS3Lite,并设置一些参数。然后,同样使用M5.dis.drawpix()函数来控制LED的颜色,并使用M5.dis.show()函数将绘制结果显示在屏幕上。循环部分也使用了loop()函数和一个延迟函数delay()来实现LED的闪烁效果。

总体来说,两段代码的功能相似,都是控制LED灯的闪烁。但是,代码1使用的是Arduino编程语言,而代码2使用的是M5AtomS3库,导致它们的一些初始化和循环方式上的差异。


资料整理

如果需要AI学习和归纳资料较多,可以使用如下方式:

chatfile。

这段代码展示了如何使用M5Stack库来操作液晶屏幕,包括初始化、切换到节能模式、恢复显示和获取屏幕高度等功能。在库文件下提供示例,其中M5.Lcd.drawString()函数在指定位置以指定字体打印字符串,M5.Lcd.print()函数用于在屏幕上打印获取到的文字对齐方式。此外,还展示M5Stack开发板的一些功能函数的使用示例,如屏幕旋转、屏幕亮度设置和透明度混合等操作。函数包括setRotation()、setBrightness()和alphaBlend()等,具体使用方法和参数在代码中有详细说明。

这段代码是关于M5Stack LCD屏幕控制函数的说明,包括初始化、切换到节能模式、恢复显示和获取屏幕高度等功能。在示例中,使用M5.Lcd.print()函数在屏幕上显示屏幕的高度。另外,还有width()函数用于返回屏幕宽度,但文中未提供具体实现和使用示例。

这段代码展示如何使用M5Stack库来操作液晶屏幕。在setup()函数中,初始化了M5Stack、Power和Lcd,并在屏幕上显示了屏幕的宽度。loop()函数为空,没有实际操作。getCursorX()和getCursorY()函数分别获取字符末尾处x和y坐标,但不能用于drawNumber()函数。getRotation()函数返回屏幕旋转方向,getTextDatum()函数返回文字对齐方式。使用示例中,getRotation()和getTextDatum()函数的参数和返回值类型不正确。M5.Lcd.drawString()函数在指定位置以指定字体打印字符串,M5.Lcd.print()函数打印获取到的文字对齐方式。setCursor()函数用于设置文本光标的位置。

综上所述,这段代码提供了M5Stack库的函数说明和示例,包括初始化屏幕、设置文本位置和颜色、旋转屏幕以及自动换行等功能,为开发者提供了便利的接口来操作M5Stack模块的各种功能。

如果需要液晶屏幕显示彩虹色,请给出示例代码

下面是一个示例代码,演示如何使用M5Stack库在LCD屏幕上显示彩虹色:

#include <M5Stack.h>  void setup() {  M5.begin(); // 初始化 M5Stack  M5.Power.begin(); // 初始化 Power 模块  M5.Lcd.begin(TFT_WIDTH, TFT_HEIGHT); // 初始化 LCD 屏幕  M5.Lcd.setRotation(3); // 将屏幕旋转到竖直方向  
}  void loop() {  // 在屏幕上绘制彩虹色条带  for (int y = 0; y < TFT_HEIGHT; y++) {  for (int x = 0; x < TFT_WIDTH; x++) {  uint32_t color = M5.Lcd.mapColor(x, y, TFT_WIDTH - x - 1, TFT_HEIGHT - y - 1);  M5.Lcd.drawPixel(x, y, color);  }  }  M5.delay(100); // 延迟一段时间,以便观察效果  
}

在这个示例代码中,我们使用两个嵌套的循环来遍历屏幕上的每个像素。对于每个像素,我们使用 M5.Lcd.mapColor() 函数将其映射为彩虹色,然后使用 M5.Lcd.drawPixel() 函数在屏幕上绘制该颜色。最后,我们使用 M5.delay() 函数延迟一段时间,以便观察效果。

能不能用呢?测试看看,不行就要修改的。

之前测试的pub,一段时间过去了,还很稳定的。


 

 

 

相关文章:

使用文心一言等智能工具指数级提升嵌入式/物联网(M5Atom/ESP32)和机器人操作系统(ROS1/ROS2)学习研究和开发效率

以M5AtomS3为例&#xff0c;博客撰写效率提升10倍以上&#xff1a; 0. Linux环境Arduino IDE中配置ATOM S3_zhangrelay的博客-CSDN博客 1. M5ATOMS3基础01按键_zhangrelay的博客-CSDN博客 2. M5ATOMS3基础02传感器MPU6886_zhangrelay的博客-CSDN博客 3. M5ATOMS3基础03给RO…...

【Rust 基础篇】Rust动态大小类型:理解动态大小类型与编写安全的代码

导言 Rust是一种以安全性和高效性著称的系统级编程语言&#xff0c;其设计哲学是在不损失性能的前提下&#xff0c;保障代码的内存安全和线程安全。在Rust中&#xff0c;动态大小类型&#xff08;DST&#xff09;是一种特殊的类型&#xff0c;它的大小在编译时无法确定&#x…...

【Python】使用nuitka打包Python程序为EXE可执行程序

1.说明 写好的Python程序如果想要拿到其他电脑上运行&#xff0c;那还得安装一下Python环境和各种库&#xff0c;这是比较麻烦的&#xff0c;所以有必要把它打包成一个可执行的exe文件。可以打包exe的库有好多个&#xff0c;比如说pyinstaller、cx_Freeze等。 pyinstaller打包…...

背景图片及精灵图

.picture {width: 48px;height: 48px;background-image: url(../images/精灵图-侧边功能.png); }为一个有宽高的div设置了背景图片&#xff0c;背景图片只作用在div的content区域内&#xff0c;不作用在padding和border上。 知识点&#xff1a; 背景图使用精灵图&#xff08;…...

简要介绍 | 生成模型的演进:从自编码器(AE)到变分自编码器(VAE)和生成对抗网络(GAN),再到扩散模型

注1:本文系“简要介绍”系列之一,仅从概念上对生成模型(包括AE, VAE, GAN,以及扩散模型)进行非常简要的介绍,不适合用于深入和详细的了解。 生成模型的演进:从自编码器(AE)到变分自编码器(VAE)和生成对抗网络(GAN),再到扩散模型 一、背景介绍 生成模型在机器学习领域…...

8.2Thread类的常见属性

1. 2.前台线程和后台线程 前台线程:影响进程结束(如果前台线程没有执行完,进程不结束). 后台线程(守护线程):不影响线程结束. 创建线程默认是前台线程. 修改成后台线程:thread.setDaetrue);...

博客摘录「 mvvm框架工作原理及优缺」2023年7月31日

mvvm 的核心是数据劫持、数据代理、数据编译和"发布订阅模式"。 1、数据劫持——就是给对象属性添加get,set钩子函数。 ● 1、观察对象&#xff0c;给对象增加 Object.defineProperty ● 2、vue的特点就是新增不存在的属性不会给该属性添加 get 、 set 钩子函数。…...

第12章 Linux 实操篇-Linux磁盘分区、挂载

12.1 Linux 分区 12.1.1 原理介绍 (1) Linux来说无论有几个分区&#xff0c;分给哪一目录使用,它归根结底就只有一个根目录&#xff0c;一个独立且唯一的文件结构, Linux中每个分区都是用来组成整个文件系统的一部分。 (2) Linux采用了一种叫“载入”的处理方法&#xff0c;…...

使用express搭建后端服务

目录 1 创建工程目录2 初始化3 安装express依赖4 启动服务5 访问服务总结 上一篇我们利用TDesign搭建了前端服务&#xff0c;现在的开发讲究一个前后端分离&#xff0c;后端的话需要单独搭建服务。后端服务的技术栈还挺多&#xff0c;有java、php、python、nodejs等。在众多的技…...

深度学习——划分自定义数据集

深度学习——划分自定义数据集 以人脸表情数据集raf_db为例&#xff0c;初始目录如下&#xff1a; 需要经过处理后返回 train_images, train_label, val_images, val_label 定义 read_split_data(root: str, val_rate: float 0.2) 方法来解决&#xff0c;代码如下&#xff1a…...

Jmeter性能测试之正则表达式提取器

目录 前言 1. Jmeter正则表达式提取器 2. 入门实例 3. 进阶实例 前言 Jmeter正则表达式提取器属于Jmeter后置处理器&#xff08;post processors&#xff09;的一种&#xff0c;用于将取样器请求到的结果以正则表达式的方式读取出来。 1. Jmeter正则表达式提取器 1. 作用…...

浅谈Kubernetes中Service网络实现(服务发现)

目录 CoreDNS(Kube-DNS) Kube-proxy kube-proxy的三种实现模式 iptables模式 IPVS模式 之前的文章介绍了Kubernetes中基于service实现了集群内部的网络通信,这篇文章详细聊一下Kubernetes中的Service网络本身又是如何实现的。...

【重造轮子】golang实现可重入锁

造个可重入锁的轮子 介绍目标 正文sync.Mutexsync.Mutex介绍多协程计数器demo多协程计数器加锁 源码剖析Mutex数据结构Lock()加锁核心逻辑 UnLock() 重入锁与可重入锁魔改 sync.Mutex 参考文档 介绍 开新坑啦&#xff01;&#xff01; 从这篇文章开始&#xff0c;尝试造轮子&a…...

torch显存分析——对生成模型清除显存

torch显存分析——对生成模型清除显存 1. 问题介绍2. 应对方法 1. 问题介绍 本文主要针对生成场景下&#xff0c;如何方便快捷地清除当前进程占用的显存。文章的重点不止是对显存的管理&#xff0c;还包括怎样灵活的使用自定义组件来控制生成过程。 在之前的文章torch显存分析…...

electron+vue+ts窗口间通信

文章目录 一. 目的二.逻辑分析三. 代码示例 "types/node": "^20.3.1","vitejs/plugin-vue": "^4.1.0","vueuse/electron": "^10.2.1","electron": "^25.2.0","electron-packager":…...

基于Fringe-Projection环形投影技术的人脸三维形状提取算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 .................................................................... figure; imshow(Im…...

如何使用Webman框架实现多语言支持和国际化功能?

如何使用Webman框架实现多语言支持和国际化功能&#xff1f; Webman是一款轻量级的PHP框架&#xff0c;提供了丰富的功能和扩展性&#xff0c;使得开发人员能够更加高效地开发Web应用程序。其中&#xff0c;多语言支持和国际化功能是Web应用程序中非常重要的一项功能&#xff…...

接受平庸,特别是程序员

目录 方向一&#xff1a;简述自己的感受 方向二&#xff1a;聊聊你想怎么做 方向三&#xff1a;如何调整自己的心态 虽然清楚知识需要靠时间沉淀&#xff0c;但在看到自己做不出来的题别人会做&#xff0c;自己写不出的代码别人会写时还是会感到焦虑怎么办&#xff1f; 你是…...

HTML兼容性

文章目录 一、兼容性二、兼容问题1. 在IE6下&#xff0c;子级的宽度会撑开父级设置好的宽度2. IE6中&#xff0c;元素浮动&#xff0c;如果宽度需要内容撑开&#xff0c;需要给里面的块元素都添加浮动才可以3. 在IE6、7下&#xff0c;元素要通过浮动排在同一排&#xff0c;就需…...

Java日期和时间处理入门指南

文章目录 1. 日期操作 - java.util.Date1.1 构造方法1.2 常用方法 2. 日期格式化 - java.text.SimpleDateFormat2.1 获取对象2.2 方法 3. 获取时间分量 - java.util.Calendar3.1 时间分量3.2 创建对象3.3 常用的时间分量3.4 获取时间分量3.5 设置时间分量 结语 引言&#xff1a…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践

前言&#xff1a;本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中&#xff0c;跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南&#xff0c;你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案&#xff0c;并结合内网…...

Spring Boot + MyBatis 集成支付宝支付流程

Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例&#xff08;电脑网站支付&#xff09; 1. 添加依赖 <!…...