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
相关产品推荐
相关产品推荐

