├── IRsendMeidi ├── IRsendMeidi.cpp ├── IRsendMeidi.h ├── IRsendMeidiDemo │ └── IRsendMeidiDemo.ino └── keywords.txt ├── README.md └── 美的空调编码.xlsx /IRsendMeidi/IRsendMeidi.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * 美的空调遥控器RN02S13红外发射控制库,需配合IRremoteESP8266库使用。 3 | * 可以控制的参数:温度(精确到0.5),模式,风速,开关机,定时,扫风,ECO,防直吹。 4 | * 作者:光阴似水1204 5 | * 了解更多请访问www.songzx.top 6 | * 时间:2021年9月17日 7 | */ 8 | #include 9 | #include "IRsendMeidi.h" 10 | #include 11 | #include 12 | int ZBPL = 38; //设置红外发射载波频率默认值,单位kHz 13 | float Temps = 26; //设置温度默认值,17-30,分辨率0.5 14 | int Modes = 0; //设置模式默认值,0自动,1制冷,2制热,3抽湿,4送风 15 | int FanSpeeds = 0; //设置风速默认值,0自动,1为20%,2为40%,3为60%,4为80%,5为100% 16 | bool Temp01 = 0; //设置默认发射温度小数位,1为0.5,0为0 17 | int Marks = 500; //标记位时间单位us 18 | int One_Space = 1600; //1位高电平时间 19 | int Zero_Space = 550; //0位高电平时间 20 | int L_Mark = 4400; //引导位低电平时间 21 | int L_Space = 4400; //引导位高电平时间 22 | int S_Space = 5220; //间隔位高电平时间 23 | uint8_t D_1 = 0xAB, D_2 = 0x66, D_3 = 0x00, D_4 = 0x00, D_5 = 0x00, D_6 = 0xDC; 24 | uint8_t A,B,C,B_1 = 0xF, B_2, C_1 = 0x1, C_2 = 0xB; 25 | uint8_t kIrLed = 4; // ESP8266 GPIO pin to use. Recommended: 4 (D2). 26 | 27 | IRsend irsend(kIrLed); // Set the GPIO to be used to sending the message. 28 | 29 | void Lead_Code(); //定义引导码发送函数 30 | void Stop_Code(); //定义分隔码发送函数 31 | void Send_Byte(uint8_t data1, int nbit1, bool msb); //定义发送原始数据的函数,data1(数据),nbit1(数据二进制位数),msb(数据发送顺序,1为低位先发,0为高位先发) 32 | 33 | void Send_Code_S(uint8_t A, uint8_t B, uint8_t C, uint8_t D_1, uint8_t D_2, uint8_t D_3, uint8_t D_4, uint8_t D_5, uint8_t D_6); 34 | //定时用的数据发送函数,因为定时发送的数据C码的反码位置为固定的11111111,所以引入该函数,C的反码位置为固定的0xFF 35 | 36 | void Send_Code_L(uint8_t A, uint8_t B, uint8_t C, uint8_t D_1, uint8_t D_2, uint8_t D_3, uint8_t D_4, uint8_t D_5, uint8_t D_6); 37 | //正常的发送数据的函数,用来发送长码 38 | 39 | void if_D6(int fs); //计算风速数据的函数,因为风速数据的D_6和温度是否有0.5位相关联。 40 | 41 | void Send_Meidi(bool Code_State); //发送长码数据的函数,1为正常发送,0为C反码固定为0xFF的发送。 42 | 43 | void IRsendMeidi::begin_2(){ //初始化IRsend.begin的函数,需写入到主程序的void setup()中。 44 | irsend.begin(); 45 | } 46 | 47 | void IRsendMeidi::setCodeTime(int marks,int one_spaces,int zero_spaces, int l_marks, int l_spaces, int s_spaces){ 48 | Marks = marks; 49 | One_Space = one_spaces; 50 | Zero_Space = zero_spaces; 51 | L_Mark = l_marks; 52 | L_Space = l_spaces; 53 | S_Space = s_spaces; 54 | } 55 | 56 | 57 | IRsendMeidi::IRsendMeidi(uint8_t ir_led){ //返回发射信号的引脚 58 | 59 | kIrLed = ir_led; 60 | } 61 | 62 | void IRsendMeidi::setZBPL(int khz){ //定义红外发射的载波频率 63 | 64 | ZBPL = khz; 65 | } 66 | 67 | void IRsendMeidi::setTemps(float Temps1){ //设置空调温度 68 | 69 | Temps = Temps1; 70 | int temp2 = floor(Temps); 71 | float temp_f = Temps - temp2; 72 | if(temp_f == 0.5){ 73 | 74 | Temp01 = 1; 75 | D_3 = 0x04; 76 | 77 | } 78 | else { 79 | 80 | Temp01 = 0; 81 | D_3 = 0x00; 82 | } 83 | if_D6(FanSpeeds); 84 | switch(temp2){ 85 | case 17: C_2 = 0x0; break; 86 | case 18: C_2 = 0x8; break; 87 | case 19: C_2 = 0xC; break; 88 | case 20: C_2 = 0x4; break; 89 | case 21: C_2 = 0x6; break; 90 | case 22: C_2 = 0xE; break; 91 | case 23: C_2 = 0xA; break; 92 | case 24: C_2 = 0x2; break; 93 | case 25: C_2 = 0x3; break; 94 | case 26: C_2 = 0xB; break; 95 | case 27: C_2 = 0x9; break; 96 | case 28: C_2 = 0x1; break; 97 | case 29: C_2 = 0x5; break; 98 | case 30: C_2 = 0xD; break; 99 | } 100 | Send_Meidi(1); 101 | } 102 | 103 | 104 | 105 | void IRsendMeidi::setModes(int Modes1){ //设置空调模式。 106 | Modes = Modes1; 107 | B_1 = 0xF; 108 | switch(Modes){ 109 | case 0: C_1 = 0x1; B_2 = 0x8; break; //auto 110 | case 1: C_1 = 0x0; B_2 = 0xB; break; //cool 111 | case 2: C_1 = 0x3; B_2 = 0xB; break; //hot 112 | case 3: C_1 = 0x2; B_2 = 0x8; break; //choushi 113 | case 4: C_1 = 0x2; B_2 = 0xB; C_2 = 0x7; break; //songfeng 114 | } 115 | Send_Meidi(1); 116 | } 117 | 118 | void IRsendMeidi::setFanSpeeds(int FanSpeeds1){ //设置空调风速。 119 | 120 | FanSpeeds = FanSpeeds1; 121 | B_1 = 0xF; 122 | if_D6(FanSpeeds); 123 | Send_Meidi(1); 124 | } 125 | 126 | 127 | void IRsendMeidi::setEco(bool Eco){ //开关ECO模式 128 | if(Eco == 1){ 129 | Send_Code(0xB9, 0xAF ,0x24); 130 | } 131 | if(Eco == 0){ 132 | Send_Code(0xB9, 0xAF ,0xA4); 133 | } 134 | } 135 | 136 | void IRsendMeidi::setPowers(bool Powers){ //开关空调 137 | 138 | if(Powers == 1){ 139 | B_1 = 0xF; 140 | setTemps(Temps); 141 | } 142 | else{ 143 | Send_Code(0XB2, 0xDE, 0x07); 144 | } 145 | } 146 | 147 | void IRsendMeidi::setSwingUD(bool SwingUD){ //开关上下扫风 148 | 149 | if(SwingUD == 1){ 150 | Send_Code(0xB9, 0xAF ,0x20); 151 | } 152 | if(SwingUD == 0){ 153 | Send_Code(0xB9, 0xAF ,0xA0); 154 | } 155 | } 156 | 157 | void IRsendMeidi::setSwingLR(bool SwingLR){ //开关左右扫风 158 | 159 | if(SwingLR == 1){ 160 | Send_Code(0xB9, 0xAF ,0xE0); 161 | } 162 | if(SwingLR == 0){ 163 | Send_Code(0xB9, 0xAF ,0x10); 164 | } 165 | } 166 | 167 | 168 | 169 | void IRsendMeidi::setFZC(bool FZC){ //开关防直吹 170 | 171 | if(FZC == 1){ 172 | Send_Code(0xB9, 0xAF ,0xDA); 173 | } 174 | if(FZC == 0){ 175 | Send_Code(0xB9, 0xAF ,0x3A); 176 | } 177 | } 178 | 179 | 180 | void IRsendMeidi::setTimers(float Timers){ //设置定时 181 | 182 | uint8_t C_1_t = C_1; 183 | int Timers1 = floor(Timers); 184 | float Timers_f = Timers - Timers1; 185 | switch(Timers1){ 186 | case 0: B_1 = 0x8; B_2 = 0x5; C_1 = 0x0; break; 187 | case 1: if(Timers_f == 0){ 188 | B_1 = 0xC; B_2 = 0x5; C_1 = 0x0;} 189 | else { 190 | B_1 = 0xA; B_2 = 0x5; C_1 = 0x0;} 191 | break; 192 | case 2: if(Timers_f == 0){ 193 | B_1 = 0xE; B_2 = 0x5; C_1 = 0x0;} 194 | else { 195 | B_1 = 0x9; B_2 = 0x5; C_1 = 0x0;} 196 | break; 197 | case 3: if(Timers_f == 0){ 198 | B_1 = 0xD; B_2 = 0x5; C_1 = 0x0;} 199 | else { 200 | B_1 = 0xB; B_2 = 0x5; C_1 = 0x0;} 201 | break; 202 | case 4: if(Timers_f == 0){ 203 | B_1 = 0xF; B_2 = 0x5; C_1 = 0x0;} 204 | else { 205 | B_1 = 0x8; B_2 = 0xD; C_1 = 0x0;} 206 | break; 207 | case 5: if(Timers_f == 0){ 208 | B_1 = 0xC; B_2 = 0xD; C_1 = 0x0;} 209 | else { 210 | B_1 = 0xA; B_2 = 0xD; C_1 = 0x0;} 211 | break; 212 | case 6: if(Timers_f == 0){ 213 | B_1 = 0xE; B_2 = 0xD; C_1 = 0x0;} 214 | else { 215 | B_1 = 0x9; B_2 = 0xD; C_1 = 0x0;} 216 | break; 217 | case 7: if(Timers_f == 0){ 218 | B_1 = 0xD; B_2 = 0xD; C_1 = 0x0;} 219 | else { 220 | B_1 = 0xB; B_2 = 0xD; C_1 = 0x0;} 221 | break; 222 | case 8: if(Timers_f == 0){ 223 | B_1 = 0xF; B_2 = 0xD; C_1 = 0x0;} 224 | else { 225 | B_1 = 0x8; B_2 = 0x5; C_1 = 0x8;} 226 | break; 227 | case 9: if(Timers_f == 0){ 228 | B_1 = 0xC; B_2 = 0x5; C_1 = 0x8;} 229 | else { 230 | B_1 = 0xA; B_2 = 0x5; C_1 = 0x8;} 231 | break; 232 | case 10: B_1 = 0xE; B_2 = 0x5; C_1 = 0x8; break; 233 | case 11: B_1 = 0xD; B_2 = 0x5; C_1 = 0x8; break; 234 | case 12: B_1 = 0xF; B_2 = 0x5; C_1 = 0x8; break; 235 | case 13: B_1 = 0xC; B_2 = 0xD; C_1 = 0x8; break; 236 | case 14: B_1 = 0xE; B_2 = 0xD; C_1 = 0x8; break; 237 | case 15: B_1 = 0xD; B_2 = 0xD; C_1 = 0x8; break; 238 | case 16: B_1 = 0xF; B_2 = 0xD; C_1 = 0x8; break; 239 | case 17: B_1 = 0xC; B_2 = 0x5; C_1 = 0x4; break; 240 | case 18: B_1 = 0xE; B_2 = 0x5; C_1 = 0x4; break; 241 | case 19: B_1 = 0xD; B_2 = 0x5; C_1 = 0x4; break; 242 | case 20: B_1 = 0xF; B_2 = 0x5; C_1 = 0x4; break; 243 | case 21: B_1 = 0xC; B_2 = 0xD; C_1 = 0x4; break; 244 | case 22: B_1 = 0xE; B_2 = 0xD; C_1 = 0x4; break; 245 | case 23: B_1 = 0xD; B_2 = 0xD; C_1 = 0x4; break; 246 | case 24: B_1 = 0xF; B_2 = 0xD; C_1 = 0x4; break; 247 | } 248 | Send_Meidi(0); 249 | C_1 = C_1_t; 250 | 251 | } 252 | 253 | void IRsendMeidi::Send_Code(uint8_t AC, uint8_t BC,uint8_t CC){ //发送ABC码的函数 254 | 255 | Lead_Code(); 256 | Send_Byte(AC,8,1); 257 | Send_Byte(~AC,8,1); 258 | Send_Byte(BC,8,0); 259 | Send_Byte(~BC,8,0); 260 | Send_Byte(CC,8,0); 261 | Send_Byte(~CC,8,0); 262 | Stop_Code(); 263 | Lead_Code(); 264 | Send_Byte(AC,8,1); 265 | Send_Byte(~AC,8,1); 266 | Send_Byte(BC,8,0); 267 | Send_Byte(~BC,8,0); 268 | Send_Byte(CC,8,0); 269 | Send_Byte(~CC,8,0); 270 | Stop_Code(); 271 | } 272 | 273 | 274 | void Send_Code_S(uint8_t AC, uint8_t BC,uint8_t CC,uint8_t D1C,uint8_t D2C, uint8_t D3C,uint8_t D4C,uint8_t D5C,uint8_t D6C){ 275 | 276 | Lead_Code(); 277 | Send_Byte(AC,8,1); 278 | Send_Byte(~AC,8,1); 279 | Send_Byte(BC,8,0); 280 | Send_Byte(~BC,8,0); 281 | Send_Byte(CC,8,0); 282 | Send_Byte(0xFF,8,0); 283 | Stop_Code(); 284 | Lead_Code(); 285 | Send_Byte(AC,8,1); 286 | Send_Byte(~AC,8,1); 287 | Send_Byte(BC,8,0); 288 | Send_Byte(~BC,8,0); 289 | Send_Byte(CC,8,0); 290 | Send_Byte(0xFF,8,0); 291 | Stop_Code(); 292 | Lead_Code(); 293 | Send_Byte(D1C,8,0); 294 | Send_Byte(D2C,8,0); 295 | Send_Byte(D3C,8,0); 296 | Send_Byte(D4C,8,0); 297 | Send_Byte(D5C,8,0); 298 | Send_Byte(D6C,8,0); 299 | Stop_Code(); 300 | } 301 | 302 | 303 | 304 | void Send_Code_L(uint8_t AC, uint8_t BC,uint8_t CC,uint8_t D1C,uint8_t D2C, uint8_t D3C,uint8_t D4C,uint8_t D5C,uint8_t D6C){ 305 | 306 | Lead_Code(); 307 | Send_Byte(AC,8,1); 308 | Send_Byte(~AC,8,1); 309 | Send_Byte(BC,8,0); 310 | Send_Byte(~BC,8,0); 311 | Send_Byte(CC,8,0); 312 | Send_Byte(~CC,8,0); 313 | Stop_Code(); 314 | Lead_Code(); 315 | Send_Byte(AC,8,1); 316 | Send_Byte(~AC,8,1); 317 | Send_Byte(BC,8,0); 318 | Send_Byte(~BC,8,0); 319 | Send_Byte(CC,8,0); 320 | Send_Byte(~CC,8,0); 321 | Stop_Code(); 322 | Lead_Code(); 323 | Send_Byte(D1C,8,0); 324 | Send_Byte(D2C,8,0); 325 | Send_Byte(D3C,8,0); 326 | Send_Byte(D4C,8,0); 327 | Send_Byte(D5C,8,0); 328 | Send_Byte(D6C,8,0); 329 | Stop_Code(); 330 | } 331 | 332 | void Send_Meidi(bool Code_State){ //发送长码数据的函数,1为正常发送,0为C反码固定为0xFF的发送。 333 | 334 | A = 0xB2; 335 | B = (B_1<<4) + B_2; 336 | C = (C_1<<4) + C_2; 337 | 338 | if(Code_State == 1){ 339 | Send_Code_L( A, B, C, D_1, D_2, D_3, D_4, D_5, D_6); 340 | 341 | } 342 | if(Code_State == 0){ 343 | Send_Code_S(A, B, C, D_1, D_2, D_3, D_4, D_5, D_6); 344 | } 345 | } 346 | void Lead_Code(){ //引导码函数定义 347 | 348 | irsend.enableIROut(ZBPL); 349 | irsend.sendData(L_Mark,L_Space,450,450,1,1,1); 350 | } 351 | 352 | void Stop_Code(){ //间隔码函数定义 353 | 354 | irsend.enableIROut(ZBPL); 355 | irsend.sendData(450,450,Marks,S_Space,0,1,1); 356 | } 357 | 358 | void Send_Byte(uint8_t data1, int nbit1, bool msb){ //数据发送函数定义 359 | 360 | irsend.enableIROut(ZBPL); 361 | irsend.sendData(Marks,One_Space,Marks,Zero_Space,data1,nbit1,msb); //使用IRsend库里的数据发送函数,具体使用方法可以查看IRsend库里的注释 362 | } 363 | 364 | void if_D6(int fs){ //计算风速数据的函数 365 | 366 | switch(fs){ 367 | case 0: B_2 = 0xD; D_2 = 0x66; if(Temp01 == 0){ 368 | D_6 = 0xDC;} 369 | else D_6 = 0xDA; 370 | break; //auto 371 | case 1: B_2 = 0xF; D_2 = 0x28; if(Temp01 == 0){ 372 | D_6 = 0x97;} 373 | else D_6 = 0x90; 374 | break; //20 375 | case 2: B_2 = 0x9; D_2 = 0x14; if(Temp01 == 0){ 376 | D_6 = 0x97;} 377 | else D_6 = 0xB8; 378 | break; //40 379 | case 3: B_2 = 0xA; D_2 = 0x3C; if(Temp01 == 0){ 380 | D_6 = 0x88;} 381 | else D_6 = 0x8C; 382 | break; //60 383 | case 4: B_2 = 0xC; D_2 = 0x0A; if(Temp01 == 0){ 384 | D_6 = 0xA4;} 385 | else D_6 = 0xA2; 386 | break; //80 387 | case 5: B_2 = 0xC; D_2 = 0x26; if(Temp01 == 0){ 388 | D_6 = 0xDC;} 389 | else D_6 = 0xDA; 390 | break; //100 391 | } 392 | } 393 | -------------------------------------------------------------------------------- /IRsendMeidi/IRsendMeidi.h: -------------------------------------------------------------------------------- 1 | #include 2 | #ifndef IRSENDMEIDI_H_ 3 | #define IRSENDMEIDI_H_ 4 | 5 | class IRsendMeidi{ 6 | public: 7 | void begin_2(); //初始化,放入void setup()中 8 | explicit IRsendMeidi(uint8_t ir_led); 9 | void setCodeTime(int marks,int one_spaces,int zero_spaces, int l_marks, int l_spaces, int s_spaces); 10 | //设置发送码的高低电平时间 11 | void setTemps(float Temps1); //设置温度 12 | void setModes(int Modes1); //设置模式 13 | void setFanSpeeds(int FanSpeeds1); //设置风速 14 | void setEco(bool Eco); //开关ECO 15 | void setPowers(bool Powers); //开关空调 16 | void setZBPL(int khz); //设置载波频率 17 | void setSwingUD(bool SwingUD); //开关上下扫风 18 | void setSwingLR(bool SwingLR); //开关左右扫风 19 | void setFZC(bool FZC); //开关防直吹 20 | void setTimers(float Timers); //设置定时 21 | void Send_Code(uint8_t A, uint8_t B,uint8_t C); //ABC码发送 22 | }; 23 | #endif 24 | -------------------------------------------------------------------------------- /IRsendMeidi/IRsendMeidiDemo/IRsendMeidiDemo.ino: -------------------------------------------------------------------------------- 1 | /* 2 | * 美的空调遥控器RN02S13红外发射控制库,需配合IRremoteESP8266库使用。 3 | * 可以控制的参数:温度(精确到0.5),模式,风速,开关机,定时,扫风,ECO,防直吹。 4 | * 温度设置,17-30,分辨率0.5 5 | * 设置模式,0自动,1制冷,2制热,3抽湿,4送风 6 | * 设置风速,0自动,1为20%,2为40%,3为60%,4为80%,5为100% 7 | * ECO,扫风,防直吹,参数1为打开,参数0为关闭。 8 | * 作者:光阴似水1204 9 | * 了解更多请访问www.songzx.top 10 | * 时间:2021年9月17日 11 | */ 12 | #include 13 | #include "IRsendMeidi.h" 14 | #include 15 | const uint8_t IR_LED = 4; //设置发送信号的GPIO引脚号,官方推荐4 16 | IRsendMeidi irsendmeidi(IR_LED); //声明类对象 17 | 18 | 19 | void setup() { 20 | 21 | irsendmeidi.begin_2(); //初始化 22 | irsendmeidi.setZBPL(40); //设置红外载波频率,单位kHz,不调用此函数则默认38,由于未知原因,我设置为40,示波器测得频率为38左右,当发送信号后没反应时,尝试更改此值。 23 | irsendmeidi.setCodeTime(500,1600,550,4400,4400,5220); //设置信号的高低电平占比,分别为标记位,1位,0位,前导码低电平,前导码高电平,间隔码高电平 24 | //不调用此函数默认为(500,1600,550,4400,4400,5220) 25 | 26 | } 27 | 28 | void loop() { 29 | irsendmeidi.setPowers(1); //打开空调 30 | delay(5000); 31 | irsendmeidi.setModes(1); //设置为制冷模式 32 | delay(5000); 33 | irsendmeidi.setTemps(26); //设置温度为26度 34 | delay(5000); 35 | irsendmeidi.setTimers(2); //定时2小时 36 | delay(5000); 37 | irsendmeidi.setTimers(9.5); //定时9.5小时 38 | delay(5000); 39 | irsendmeidi.setFanSpeeds(5); //设置风速为100% 40 | delay(5000); 41 | irsendmeidi.setFanSpeeds(1); //设置风速为20% 42 | delay(5000); 43 | irsendmeidi.setEco(1); //打开ECO 44 | delay(5000); 45 | irsendmeidi.setEco(0); //关闭ECO 46 | delay(5000); 47 | irsendmeidi.setTemps(26.5); //设置温度为26.5度 48 | delay(5000); 49 | irsendmeidi.setSwingUD(1); //打开上下扫风 50 | delay(5000); 51 | irsendmeidi.setFZC(1); //打开防直吹模式 52 | delay(5000); 53 | irsendmeidi.setPowers(0); //关闭空调 54 | delay(10000); 55 | 56 | } 57 | -------------------------------------------------------------------------------- /IRsendMeidi/keywords.txt: -------------------------------------------------------------------------------- 1 | begin_2 KEYWORD2 2 | IRsendMeidi KEYWORD1 3 | setCodeTime KEYWORD2 4 | setTemps KEYWORD2 5 | setModes KEYWORD2 6 | setFanSpeeds KEYWORD2 7 | setEco KEYWORD2 8 | setPowers KEYWORD2 9 | setZBPL KEYWORD2 10 | setSwingUD KEYWORD2 11 | setSwingLR KEYWORD2 12 | setFZC KEYWORD2 13 | setTimers KEYWORD2 14 | Send_Code KEYWORD2 -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # IRsendMeidi_ESP8266-RN02S-Midea
2 | 对Arduino中IRremoteESP8266库美的空调控制的补充,主要依赖于IRremoteESP8266库的sendData()函数来实现数据的发送。
3 | 需配合Arduino中的IRremoteESP8266库使用。
4 | 主要控制采取的实际数据来源于美的空调RN02S13遥控器,空调型号为美的冷静星。
5 | 可以控制的参数:温度(精确到0.5),模式,风速,开关机,定时,扫风,ECO,防直吹。
6 | 文件为库文件,直接将文件夹IRsendMeidi放入ArduinoIDE的库文件夹中即可。
7 | 8 | 参数设置 9 | ------ 10 | * 温度设置,17-30,分辨率0.5
11 | * 设置模式,0自动,1制冷,2制热,3抽湿,4送风
12 | * 设置风速,0自动,1为20%,2为40%,3为60%,4为80%,5为100%
13 | * ECO,扫风,防直吹,参数1为打开,参数0为关闭。
14 | 15 | 其他说明 16 | ----- 17 | 因编程水平不高,代码有写的不好的地方,不喜勿喷。
18 | 所有数据都是我使用逻辑分析仪从遥控器上面采集的,并且手动把二进制转换成十六进制,难免会有出现错误的情况,若遇到问题,请反馈给我。
19 | 对美的编码形式的问题可以参考这篇文章https://blog.csdn.net/weixin_42204837/article/details/109263771
20 | -------------------------------------------------------------------------------- /美的空调编码.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GYSS1204/IRsendMeidi_ESP8266-RN02S-Midea/e272202616c2348680cbd28248a7c2ed2dd533ce/美的空调编码.xlsx --------------------------------------------------------------------------------