一、任務和要求
字符型液晶顯示模塊是一種專門用于顯示字母、數(shù)字、符號等點陣式 LCD,目前常用 16*1, 16*2,20*2 和 40*2 行等的模塊。本設計中用的顯示器為LCD1602 字符型液晶顯示器,是一種16*2的顯示器。為例,其實物如下圖;1602LCD 分為帶背光和不帶背光兩種,基控制器大部分為 HD44780,帶背光的比不帶背光的厚,是否帶背光在應用中并無差別。其詳細資料請看“LCD1602中文資料”。
在本設計中,為同學們提供了LCD1602的驅動文件lcd.c和lcd.h,可調用的函數(shù)及功能如下:
void Lcd1602_Delay1ms(uint c); //誤差 0us
void Read_Busy(); //忙檢測函數(shù),判斷bit7是0,允許執(zhí)行;1禁止
void Lcd1602_Write_Cmd(unsigned char cmd); //寫命令
void Lcd1602_Write_Data(unsigned char dat); //寫數(shù)據(jù)
void LcdSetCursor(unsigned char x,unsigned char y); //坐標顯示
void LcdShowStr(unsigned char x,unsigned char y,unsigned char *str); //顯示字符串
void InitLcd1602(); //1602初始化
其主要特點、內部結構和工作時序請詳見“數(shù)字溫度傳感器DS18B20的應用”PPT。
2)DS18B20進行一次溫度的轉換
(1)主機先作個復位操作,
(2)主機再寫跳過ROM的操作(CCH)命令,
(3)然后主機接著寫個轉換溫度的操作命令,后面釋放總線至少一秒,讓DS18B20完成轉換的操作。在這里要注意的是每個命令字節(jié)在寫的時候都是低字節(jié)先寫,例如CCH的二進制為11001100,在寫到總線上時要從低位開始寫,寫的順序是“零、零、壹、壹、零、零、壹、壹”。整個操作的總線狀態(tài)如下圖。
讀取RAM內的溫度數(shù)據(jù)。同樣,這個操作也要接照三個步驟。
(1)主機發(fā)出復位操作并接收DS18B20的應答(存在)脈沖。
(2)主機發(fā)出跳過對ROM操作的命令(CCH)。
(3)主機發(fā)出讀取RAM的命令(BEH),隨后主機依次讀取DS18B20發(fā)出的從第0一第8,共九個字節(jié)的數(shù)據(jù)。如果只想讀取溫度數(shù)據(jù),那在讀完第0和第1個數(shù)據(jù)后就不再理會后面DS18B20發(fā)出的數(shù)據(jù)即可。同樣讀取數(shù)據(jù)也是低位在前的。整個操作的總線狀態(tài)如下圖:
本設計中使用DS18B20的驅動程序ds18b20.c和ds18b20.h,文件中提供了如下的函數(shù)。
void Delay_OneWire(unsigned int t);//單總線延時函數(shù)
void Write_DS18B20(unsigned char dat);//通過單總線向DS18B20寫一個字節(jié)
unsigned char Read_DS18B20(void);//從DS18B20讀取一個字節(jié)
bit init_ds18b20(void);//DS18B20設備初始化
5)18B20測溫流程圖
要點:
1、在讀取溫度數(shù)據(jù)時,是低8位在前,高8位在后,需要將這兩個數(shù)據(jù)合并為一個數(shù)據(jù);
2、讀取的溫度是補碼形式表示的,需將轉換成原碼;
3、求實際溫度公式:temp=tp*0.0625*100+0.5(tp為浮點開數(shù)據(jù),temp為無符號整形數(shù)據(jù),此數(shù)據(jù)為實際溫度的100倍),乘上100是為溫度小數(shù)后保留2位,加上0.5起校正數(shù)據(jù)的作用。
4、將溫度數(shù)據(jù)存入數(shù)組時,需將各位數(shù)據(jù)分離開來,再存入數(shù)組,例:
datatemp[0] = temp / 10000+0x30;
datatemp[1] = temp % 10000 / 1000+0x30;
3、模塊和單片機開發(fā)板的連接
GND:接地
GPIO16:其實是RST,低電平復位,所以為了正常工作,連接開發(fā)板3.3V電源
VCC:接單片機開發(fā)板VCC
UTXD、URXD:前者接單片機或USB轉串口模塊的RXD,后者接TXD。單片機P3.0為RX,P3.1為TX。特別注意當用單片機開發(fā)板串口測試WIFI模塊時,模塊的UTXD、URXD要分別和單片機串口的TX和RX連接。
GPIO2、GPIO0:懸空
CH_PD:連接開發(fā)板3.3V電源
三、WIFI模塊AT指令的測試
1、WIFI模塊的AT指令測試
特別提示:通過串口用AT指令測試WIFI模塊時,模塊的UTXD、URXD要分別和單片機串口的TX和RX連接。
測試AT指令時,首先打開串口助手,如下圖:
關于AT指令的測試,請同學參考文檔“AT指令集018.pdf”對AT指令進行測試。
2、WIFI模塊通過網絡和計算機通信的AT指令
1)重啟wifi模塊
指令:AT+RST
返回:OK
2)設置WIFI模塊的工作模式
指令:AT+CWMODE=3//設置模塊為透傳工作模式
返回:OK
3)登錄路由器
指令:AT+CWJAP="TP-LINK_ym2","12345678"//登錄路由器,路由wifi用戶名和密碼
返回:WIFI CONNECTED
WIFI GOT IP
4)連接TCP服務器(wifi模塊作為客戶端,計算機作為服務器,要先打開監(jiān)聽)
首先要打開軟件網絡調試助手,協(xié)議類型為TCP Server,點擊開始監(jiān)聽。
指令: AT+CIPSTART="TCP","192.168.0.100",8080
返回:Connect OK
執(zhí)行以上指令后,wifi模塊就會連接到計算機的TCP Server,在網絡調試助手上的連接對象欄就會出現(xiàn)WIFI模塊的IP地址及端口號,如下圖所示:
5)使能透傳模式
指令:AT+CIPMODE=1
返回:OK
6)透傳發(fā)送數(shù)據(jù)
指令:AT+CIPSEND
返回:>(在此提示下可以發(fā)送數(shù)據(jù))
7)退出透傳數(shù)據(jù)發(fā)送
指令:+++(去掉串口助手中發(fā)送新行選項)
返回:返回到AT指令模式
執(zhí)行了以上的AT指令以后,用串口調試助手和網絡調試助手就可以實現(xiàn)WIFI模塊通過路由器和計算機進行數(shù)據(jù)通信了。
3、WIFI模塊和手機進行通信(WIFI模塊作為客戶端,手機作為服務器)
4)連接TCP服務器(wifi模塊作為客戶端,手機作為服務器,要先打開監(jiān)聽)
首先在手機上安裝有人網絡調試助手的APP,打開APP如下圖所示:
選擇tcp server,點擊配置,設置手機的端口號,再點擊激活后,會在手機屏幕上顯示手機的IP和端口號,請一定記住IP和端口號,輸入以下指令。
指令: AT+CIPSTART="TCP","192.168.1.122",5000//手機的IP和端口號
返回:CONNECT OK
執(zhí)行以上指令后,網絡助手上會顯示wifi模塊的IP和端口號,如下圖:
5)使能透傳模式
指令:AT+CIPMODE=1
返回:OK
6)透傳發(fā)送數(shù)據(jù)
指令:AT+CIPSEND
返回:>(在此提示下可以發(fā)送數(shù)據(jù))
7)退出透傳數(shù)據(jù)發(fā)送
指令:+++(去掉串口助手中發(fā)送新行選項)
返回:返回到AT指令模式
4、多連接 server
目前 AT Demo ESP8266作為服務器, 需建立多連接作為服務器, 需建立多連接即可以連接多個client。
以下為 ESP 8266 作為 softAP建立 TCP 服務器的舉例 服務器的舉例 :
1) 設置 wifi 模式:
AT+CWMODE=3// 設置為 AP+station共存模式
響應: OK
2) 重啟生效
AT+RST
響應: OK
3) 啟動多連接
AT+CIPMUX=1
響應: OK
4) 建立 server
AT+CIPSERVER=1 //默認端口 333 333
響應 :OK
5) PC 連入設備 softAP ,PC作client 連接設備。 連接設備。
注意, ESP8266 作為 server 有超時機制, 如果連接建立后超時機制, 如果連接建立后一段 時間內無數(shù)據(jù)來往, server 會將 client 踢掉。請在 PC 工具連上 ESP8266 后建立一個 2s 的循環(huán)數(shù)據(jù)發(fā)送,用于保持連接。
6) 發(fā)送數(shù)據(jù)
AT+CIPSEND=0,4 // 0是設備的通信號,4表示四個字節(jié)
響應: SEND OK
7) 接收數(shù)據(jù)
+IPD,n:xxxxxxxxxx // n表示通信號 ,xxxxx 為數(shù)據(jù)
四、WIFI模塊通過網絡和計算機通信的編程實現(xiàn)
特別提示:單片機開發(fā)板通過串口發(fā)送AT指令測試WIFI模塊時,模塊的UTXD、URXD要分別和單片機串口的RX和TX連接。
用單片機發(fā)送相應的AT指令程序語句如下:
uart_sendstring("AT+RST\r\n");
delay(50);
uart_sendstring("AT+CWMODE=3\r\n");
delay(20);
uart_sendstring("AT+CWJAP=\"TP-LINK_ym2\",\"12345678\"\r\n");
delay(50);
uart_sendstring("AT+CIPSTART=\"TCP\",\"192.168.0.110\",8080\r\n");
delay(20);
uart_sendstring("AT+CIPMODE=1\r\n");//使能透傳模式
delay(20);
uart_sendstring("AT+CIPSEND\r\n");//透傳發(fā)送數(shù)據(jù)
delay(20)注意:如用定時器0定時發(fā)送數(shù)據(jù)時,串口中斷優(yōu)先級一定要高于定時器0中斷。
五、WIFI模塊和手機進行通信的編程實現(xiàn)
用單片機發(fā)送相應的AT指令程序語句如下:
uart_sendstring("AT+RST\r\n");
delay(50);
uart_sendstring("AT+CWMODE=3\r\n");
delay(20);
uart_sendstring("AT+CWJAP=\"手機熱點名\",\"密碼\"\r\n");
delay(50);
uart_sendstring("AT+CIPSTART=\"TCP\",\"192.168.1.122\",5000\r\n");//wifi作為 TCP client,手機作為TCP服務器, 連接 TCP server:
delay(50);
uart_sendstring("AT+CIPMODE=1\r\n");//使能透傳模式
delay(20);
uart_sendstring("AT+CIPSEND\r\n");//透傳發(fā)送數(shù)據(jù)
delay(20);
六、基于ONENET的簡易智能家居系統(tǒng)
1)注冊ONENET用戶
進入ONENET主頁( https://open.iot.10086.cn/),如下圖,注冊帳號。
2)進入開發(fā)者中心,創(chuàng)建產品
3)創(chuàng)建設備
請記住設備的ID號和產品的APIKEY
4)計算作為TCP客戶端,上傳數(shù)據(jù)到ONENET
ONENET云平臺HTTP接入?yún)f(xié)議服務器IP:183.230.40.33,端口號:80
發(fā)送數(shù)據(jù)的格式指令如下,指令格式不能有錯,否則云平臺接收不到數(shù)據(jù)。
POST /devices/32161187/datapoints?type=3 HTTP/1.1(紅色的為設備的ID號)
api-key: 87fKUPvenMiyB8lXgng=u0OY5eU= (產品的唯一APIKEY )
Host: api.heclouds.com
Content-Length: 15(回車換行)
(回車換行)
{wendu":23}(回車換行)
數(shù)據(jù)發(fā)送成功以后,可以在ONENET平臺觀察到上傳的數(shù)據(jù),如下圖:
如果想通過網頁來瀏覽上傳的數(shù)據(jù),可以通過應用管理,創(chuàng)建應用的方式創(chuàng)建應用,并通過網址來訪問。
2、把wifi模塊作為TCP客戶端,通過串口助手把數(shù)據(jù)上傳到ONENET
1)wifi模塊登錄路由器,登錄ONENET
此步驟和前面所學的wifi模塊登錄計算機作為TCP服務器完全相同,這里不再贅述。
2)通過串口助手把數(shù)據(jù)上傳到ONENET
因為要一次發(fā)多條指令,所以使用一次發(fā)送多條指令的XCOM串口助手。如下圖
ONENET平臺一樣可以接收到上傳的數(shù)據(jù)。
3)通過編程實現(xiàn)數(shù)據(jù)的上傳
(1)登錄ONENET函數(shù)
完整的Word格式文檔51黑下載地址:
物聯(lián)網綜合設計實驗指導.docx
(1.18 MB, 下載次數(shù): 68)
歡迎光臨 (http://www.torrancerestoration.com/bbs/) | Powered by Discuz! X3.1 |