Wemos d1 串口通信发送16进制数据
问题:因为语音播放模块的原因可能需要板子发送一串16进制的数据,来激活语音播放模块或者其他模块使其正常工作。
1、Arduino 中先理解Serial.print()函数与Serial.write()函数的区别
例 1.发送十进制的数据 int i=1;分别用Serial.print()函数与Serial.write()函数发送:
在程序演示之前,我先推算一下运算过程:
用Serial.print() 发送的过程 【int 97 ——转化为两个字符型数据char 9、和char 7——(以char 9为例)Serial.print() 发送字符9的ascii码(00111001)—— 串口监视器接收到ascii码,则会显示对应的字符即9.——字符char 7过程相同,即结果为97】
用Serial.write() 发送的过程 【int 97 ——Serial.write() 发送97的ascii码(10010111)——串口监视器接收到ascii码,则会显示对应的字符即a,以十六进制显示的话为(0x61)】
2、注意的是波特率要与串口接收的一样大
3、arduino端口要与串口一一致
4、代码
#include<ESP8266WiFi.h>
#include<Servo.h>
#define DuoPIN D3 //设置舵机的引脚输出
Servo myDuoJi; //定义一个类
void setup() {
Serial.begin(9600); //初始化串口(重要)
}
void loop() {
const byte GKongTiao[]={0xAA,0x07,0x02,0x00,0x01,0xB4}; //将十六进制数据定义出来
const byte KKongTiao[]={0xAA,0x07,0x02,0x00,0x02,0xB5};
char i=Serial.read();
if(i == '1')
{
Serial.write(KKongTiao,(sizeof(KKongTiao) / sizeof(KKongTiao[0])));
}else if(i=='0'){
Serial.write(GKongTiao,(sizeof(GKongTiao) / sizeof(GKongTiao[0])));
}
}
//}
//}