You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Arduino中如何将传感器数据字符串转为AT指令所需十六进制字符串?

Arduino将传感器数据字符串转为十六进制载荷并生成AT指令

核心转换函数

先实现一个函数,把输入的ASCII字符串转换成对应两位十六进制格式的字符串(每个字符对应其ASCII码的十六进制表示):

String stringToHex(String input) {
  String hexStr = "";
  for (int i = 0; i < input.length(); i++) {
    char hexChar[3];
    // 把字符转成两位大写十六进制,调制解调器一般兼容大小写,小写用%02x即可
    sprintf(hexChar, "%02X", input[i]);
    hexStr += hexChar;
  }
  return hexStr;
}

完整代码示例

结合你的传感器数据拼接逻辑,完整实现代码如下:

float temperature = 29.5;
float humidity = 32.56;
float lightLevel = 17365.83;
int co2 = 452;
int noise = 583;

void setup() {
  Serial.begin(9600);
  
  // 拼接传感器数据字符串
  String dataString = String(temperature) + "," + String(humidity) + "," + String(lightLevel) + "," + String(co2) + "," + String(noise);
  
  // 转换为十六进制字符串
  String hexPayload = stringToHex(dataString);
  
  // 添加目标格式要求的结尾"AA"
  hexPayload += "AA";
  
  // 生成最终AT指令
  String atCommand = "AT+SEND=1:1:" + hexPayload;
  
  // 输出结果(实际使用时替换为调制解调器对应的串口,比如Serial1)
  Serial.println(atCommand);
}

void loop() {
  // 按需添加循环逻辑
}

// 字符串转十六进制函数
String stringToHex(String input) {
  String hexStr = "";
  for (int i = 0; i < input.length(); i++) {
    char hexChar[3];
    sprintf(hexChar, "%02X", input[i]);
    hexStr += hexChar;
  }
  return hexStr;
}

关键细节说明

  • 字符转十六进制逻辑:sprintf(hexChar, "%02X", input[i]) 会将每个字符的ASCII码转为两位大写十六进制,比如字符'2'的ASCII是0x32,转换后就是"32",和你给出的目标格式完全匹配。
  • 结尾追加AA:按照你提供的目标十六进制字符串要求,在转换后的结果末尾直接拼接"AA"即可。
  • 载荷长度限制:调制解调器要求载荷最大242字节,由于十六进制字符串每两位对应一个字节,所以转换后的十六进制字符串总长度不能超过242。也就是原dataString的长度最多为(242-2)/2 = 120字符(减去结尾AA的2位),实际使用时可以添加长度检查避免超出限制。
  • 串口适配:如果调制解调器连接在Arduino的硬件串口(比如Serial1),只需把Serial.println(atCommand)替换为对应串口的输出语句即可。

内容的提问来源于stack exchange,提问作者DevilCode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 22:55:05