網上雖然有很多關於微信小程序藍牙和單片機進行串口通信文章,但是大部分的人 還是有所保留的,有的文章說個一知半解,有的只貼出了部分代碼。這對新手來說無疑是雪上加霜,甚至你花很多的時間研究他們的文章結果發現連跑起來都難,會出現一堆的問題。我深知對新手來說其中的不容易,故抽出時間來給新手們來個實戰教程。
一、硬件准備
1、低功耗藍牙透傳模塊(並不是任何藍牙模塊都能和微信小程序藍牙連接,微信小程序使用的是低功耗藍牙,如hc-06以上,本例使用是hc-08,協議版本是4.0)
2、下載代碼到本地,並使用微信小程序工具打開,編譯通過后點擊真機調試(微信小程序不支持在開發工具上調試)
3、將藍牙模塊上電並使用微信小程序搜索藍牙設備
4、上位機收到信息
5、上面可以看出微信小程序發送數據串口能接收到,由於我沒有硬件,下面單片機使用仿真來演示。
6、發送1表示開燈,0表示關燈,單片機收到數據后返回對應的信息
單片機源碼如下:
#include <reg51.h> sbit p1_0 = P1^0; //初始化串口 (設置串口,開啟串口中斷) void init_uart(void) { SCON = 0x50; // SCON: 方式 1, 8-bit, 允許接收數據 TMOD |= 0x20; // TMOD: 設置定時器1工作在方式2, 8-bit 自動重裝 TH1 = 0xFD; // TH1: 初始值為0xFD 波特率:9600 晶振頻率:11.0592MHz TL1 = 0xFD; TR1 = 1; // TR1: 開啟定時器1 EA = 1; //打開總中斷 ES = 1; //打開串口中斷 } // 發送一個字節數據 void uart_send_byte(unsigned char dat) { SBUF = dat; // 將數據送到發送緩沖寄存器SBUF,一位一位的發送 while(!TI); // 等待發送完畢 (發送完畢TI硬件置1) TI = 0;// 將TI清零,表示可以發送下一字節數據。 } // 發送字符串 void uart_send_str(unsigned char *s) { while(*s != '\0')// '\0':字符串結束標志 { uart_send_byte(*s);// 發送1個字節數據,1個字符占8位,1字節 s++;// 指向下一個字符 } } // 串口中斷處理函數 (串口接收到數據,發送數據完畢都可以引起串口中斷) void uart_interrupt(void) interrupt 4 //也叫串行中斷服務程序 { unsigned char recv_data;// 用來存放接收到的數據 unsigned char send_data[] = "I received.\n";// 要發送的信息 if(RI) //接收數據(1字節)完畢,RI會被硬件置1 { RI = 0; // 將 接收中斷標志位 清零(讓串口可以繼續接收數據) recv_data = SBUF; //讀取接收到的數據,並存放到data if(recv_data == '1')//如果收到的字符是'0',就讓燈滅 { p1_0 = 0;// p1.0引腳低電平,LED燈亮 } else { p1_0 = 1;// p1.0引腳高電平,LED燈滅 } uart_send_str(send_data); //收到數據之后,發送字符串"I received."給對方 } if(TI)// 發送數據(1字節)完畢 { TI = 0;// 將 發送中斷標志位 清零(讓串口可以繼續發送數據) } } void main(void) { init_uart();// 初始化串口 while(1);// 主循環不做任何動作。(死循環) }
至此,實現了微信小程序藍牙與單片機通信。
如果還有不明白的可以加我QQ進行咨詢。
1842988062