项目场景:
最近经一个朋友的要求写了一个程序:
需求是
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字符转为十六进制数,并串口输出