ESP32 Arduino使用Serial.printf()函数

本文介绍在ESP32的Arduino环境中使用printf()函数的方法,通过实例展示如何输出变量值,特别指出在串口监视器中显示中文的能力。同时,文章记录了使用第二硬件串口遇到的问题及初步解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在ESP32中使用printf()函数

在ESP32的Arduino编程中,可以使用printf函数来输出,这在标准的库函数说明中没有提及。其实ESP32的core中是可以使用的。这对调试程序提供了便利!

例子

setup()
{
	Serial.begin(115200);
	int intX = 20;
	Serial.printf("输入的整数 = %d\r\n", intX);
}	

运行结果

运行结果不展示了,注意用Arduino IDE自带的串口监视器可以显示中文。结果是不是很惊奇?

备注

用ESP32采用CH340或者是自己带的串口监视器,串口输出正常,但串口输入不正常,如下:

在这里插入图片描述
有知道的大佬给提示一下,看如何解决!

刚才说的串口不好用是说的第二串口,我用了硬件的第二串口。HardwareSerial, 第二串口的默认外接是rxPin = 16, txPin = 17, 用这个外接端子不好用,换成了rxPin = 4和 txPin = 5. 可以使用了,但通讯的速率只能在9600,发送数据没有问题,接收串口的数据当波特率大于9600时有问题。只能先这样使用了。等解决了告诉大家。

### ESP32 Arduino 函数列表及用法 #### 1. CAN 总线库函数 ESP32-Arduino-CAN 库提供了用于配置和操作CAN总线的功能。这些功能允许设备间通过高效可靠的通信协议交换数据。 - **初始化 CAN 接口** `begin(long canSpeed)` 方法用来启动 CAN 控制器并设置波特率。 ```cpp Can.begin(CAN_500KBPS); ``` - **发送消息** 发送一条标准格式的消息到 CAN 网络上可以使用如下代码: ```cpp Can_message msg; msg.id = 0x123; // 设置ID msg.flags.extended = false; // 是否扩展帧 msg.len = 8; // 数据长度 memcpy(msg.data, dataToSend, sizeof(dataToSend)); // 复制要传输的数据 Can.write(msg); // 将消息写入缓冲区准备发送 ``` - **接收消息** 可以利用循环读取接收到的信息直到没有更多可用为止: ```cpp while (Can.available()) { Can.read(msg); Serial.print("Received ID="); Serial.println(msg.id); for(int i=0;i<msg.len;i++){ Serial.printf("%X ", msg.data[i]); } Serial.println(); } ``` 以上内容均基于 ESP32-Arduino-CAN 的官方文档说明[^1]。 #### 2. 霍尔编码器解码相关函数 对于采用霍尔传感器实现位置反馈的应用场景,比如平衡小车项目里提到的电机控制部分,则涉及到如何解析来自编码器的位置变化信号。 - **正交编码处理** 当检测到来自两个通道A/B相位差90度角脉冲序列时,可以通过中断服务例程来更新当前位置计数器变量。 ```cpp volatile long encoderPos = 0; void IRAM_ATTR onEncoder() { static bool lastStateB = digitalRead(ENCODER_PIN_B); bool currentStateB = !lastStateB; if(digitalRead(ENCODER_PIN_A)){ encoderPos += currentStateB ? 1 : -1; }else{ encoderPos -= currentStateB ? 1 : -1; } lastStateB = currentStateB; } attachInterrupt(digitalPinToInterrupt(ENCODER_PIN_A), onEncoder, CHANGE); ``` 此段代码展示了当 A 或 B 引脚状态改变触发 ISR 来调整全局变量 `encoderPos` 的值,从而跟踪旋转方向与角度的变化情况[^2]。 #### 3. OLED 显示屏驱动 U8g2 库命令集 U8g2 是一款支持多种图形 LCD 屏幕类型的 C++ 类库,在这里特别适用于 IIC/SPI 方式的 SSD1306/OLED 设备连接方案下显示文字或简单图像图案。 - **绘制固定文本** 使用 `drawStr()` 函数可以在指定坐标处打印字符串信息至屏幕之上。 ```cpp u8g2.drawStr(xPosition, yPosition, "Hello World!"); ``` 其中 `(xPosition,yPosition)` 定义了起始点相对于左上方边界的偏移量;而 `"Hello World!"` 即为待呈现的具体字符串对象[^3]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值