【GBK字符转十六进制数】:ESP8266&ESP32在基于arduino和vscode(platformio)的基础上开发,将GBK字符转换成十六进制数表示,并用串口输出出来

本文介绍了如何在ESP8266和ESP32平台上,基于Arduino IDE和VSCode的PlatformIO插件,将GBK字符转换为十六进制数并通过串口输出。分别提供了两种实现方式的代码示例,强调了在Arduino软件中处理GBK编码的特殊性。

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

项目场景:

        最近经一个朋友的要求写了一个程序:

需求是

        1.在ESP8266或ESP32的基础上开发,将程序中定义的GBK字符转换成十六进制数,并显示在串口中。

根据需求我写了两种方式解决需求:

        1.在arduino软件开发的基础上实现效果

        2.在vscode的插件platformio的基础上实现程序开发解决问题,实现需求


问题描述:arduino软件开发的基础上实现效果(将GBK字符转换成十六进制数表示,并用串口输出出来)

        如何使用程序将GBK字符转换成十六进制数,这里就不再赘述了,网上讲解的有很多,讲的很清楚,这里就不浪费大家的时间了,下面直接上代码,且说一下arduino软件的问题。

                由于arduino软件,默认的编码格式是UTF-8,无法直接将软件更改为GBK编码模式,所以需要手动修改格式需要,下面视频有详细步骤,这里不再赘述!

视频效果: 

arduino软件下的gbk字符转十六进制数代码视频

代码截图:

 

代码:

    test.ino文件代码:


#include "Led.h"



// void toHex(char c) {
//   char high = (c >> 4) & 0x0F;
//   char low = c & 0x0F;
//   high = high < 10 ? high + '0' : high + 'A' - 10;
//   low = low < 10 ? low + '0' : low + 'A' - 10;
//   Serial.println(high);
//   Serial.println(low);
// }


void setup() {
  Led myled;
  Serial.begin(9600);
  myled.on();
}

void loop() {
  delay(1000);
}

Led.cpp文件代码:

#include "Led.h"

char c[] = "����";

Led::Led() {
  Serial.println("Led Object Created.");
}

Led::Led(int userLedPin) {
  Serial.println("Led Object Created.");
  // ledPin = userLedPin;
  // pinMode(ledPin, OUTPUT);
}

Led::~Led(){
  Serial.println("Led Object Deleted.");
}

int Led::getLedPin() {
  return ledPin;
}




void Led::toHex(char c) {
  char high = (c >> 4) & 0x0F;
  char low = c & 0x0F;
  high = high < 10 ? high + '0' : high + 'A' - 10;
  low = low < 10 ? low + '0' : low + 'A' - 10;
  Serial.println(high);
  Serial.println(low);
}
void Led::on() {                //  ledPin    ? ?
  Serial.println();
  Serial.println("=====================\n");
  for (int i = 0; i < sizeof(c) - 1; i++) {
      toHex(c[i]);
  }
  Serial.println("=====================\n");
}

void Led::off() {               //  ledPin    ? ?
  // digitalWrite(ledPin, LOW);
}

Led.h代码文件:

#ifndef _LED_H_
#define _LED_H_
 
#include <Arduino.h>
 
class Led {
  public:
    Led();                    //析构函数
    Led(int userLedPin);      //重载析构函数(带参数)
    ~Led();
    void on();                //打开LED
    void off();               //关闭LED
    void toHex(char c);
    int getLedPin();
    
  private:
    int ledPin = 3;//初始化引脚编号为3(要与硬件搭建一致)
};//注意这边要有分号结束
 
#endif

问题描述:vscode的插件platformio的基础上实现程序开发解决问题,实现需求(将GBK字符转换成十六进制数表示,并用串口输出出来)

        vscode的platformio开发ESP8266不再赘述,大家可以自行搜索教程,代码如下:

代码:

#include <Arduino.h>

char c[] = "中国";

void toHex(char c) {
  char high = (c >> 4) & 0x0F;
  char low = c & 0x0F;
  high = high < 10 ? high + '0' : high + 'A' - 10;
  low = low < 10 ? low + '0' : low + 'A' - 10;
  Serial.print(high);
  Serial.print(low);
}

//0xD6,0xD0,0xB9,0xFA

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  Serial.println();
  Serial.println("=====================\n");
  for (int i = 0; i < sizeof(c) - 1; i++) {
      toHex(c[i]);
  }
  Serial.println("=====================\n");
}

void loop() {
  // put your main code here, to run repeatedly:
}

视频讲解:

vscode(platformio)开发ESP8266实现GBK字符转为十六进制数,并串口输出


谢谢您的慷慨解囊,后续会有更多的知识和技能分享,请持续关注哦。十分感谢!!!

### ESP8266 发送据时出现乱码的解决方案 #### 设置正确的波特率 确保ESP8266与接收端设备之间的波特率设置一致。常见的波特率为115200bps,但在某些情况下可能需要调整到其他速率如9600bps或74880bps来匹配特定的应用场景[^1]。 #### 调整字符编码方式 对于中文字符传输而言,应当确认双方都采用相同的字符集编码标准,比如UTF-8或者GBK。如果仅有一方进行了汉字义处理而另一方未做相应换,则会造显示异常现象[^3]。 #### 修改初始化参 当遇到持续性的乱码输出情况时,可以尝试修改ESP8266启动时加载默认配置的方式。具体操作是在上传程序前先断开电源再重新接通,并保持GPIO0处于低电平状态几秒钟直到看到指示灯闪烁三次以上为止;这样做能够清除之前保存的一些可能导致冲突的据记录[^2]。 #### 使用稳定可靠的库函 选用经过广泛测试验证过的第三方开发包来进行网络请求等复杂功能调用有助于减少因底层实现缺陷引发的问题几率。例如,在Arduino IDE环境中集支持ESP8266平台特性的官方扩展组件就可以有效改善通讯质量并简化编程流程[^4]。 ```cpp #include <ESP8266WiFi.h> // 初始化Wi-Fi连接... ``` #### 检查硬件连接稳定性 物理层面上也要注意检查各接口间是否存在接触不良的情况,特别是GND接地线是否牢固可靠地接入电路板上对应的焊盘位置。另外还需排查是否有电磁干扰源影响到了信号传递路径上的正常工作状况[^5]。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式up

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值