RoBoard魔人的機器人日誌

2016/2/2

[86Duino] 在SPI上使用ESP8266

ESP8266,是一個極為便宜的Wifi晶片,
因為網路上已經有許多的介紹文,所以本魔在此就不多贅述。

首先先講講一般ESP8266的接法及使用,
標準接線圖
實際範例
將ESP8266接上86duino後,
就可以將下列程式碼燒入86duino,
這樣就可以透過來做AT Command的控制。

void setup()
{

 Serial.begin(9600);
 Serial1.begin(115200);
}
void loop()
{
 while (Serial1.available()) {
  Serial.write(Serial1.read());
 }
 while (Serial.available()) {
  Serial1.write(Serial.read());
 }
}


燒入後可以用
這樣就可以做一些基本連線及設定的控制,
至於下AT Command的方法請參考文件



然而為什麼要改裝到SPI上呢?
請看下圖!

改裝後
沒錯,這樣就可以牢牢的插在86Duino上,
因為在本魔實驗時常常遇到因機器人晃動造成ESP8266電源接觸不良導致斷線,
而且這樣也不用考慮整線的問題。

那麼就開始進入我們的教學,
首先要做出我們的轉接座。
轉接座及ESP8266
材料也很簡單,
兩顆母座2x5 ROHS及一條cable
母座2x5 ROHS

或許你會問,
為什麼需要多一條線?
SPI不就有電源輸出了嗎?
為什麼還要再跳線?
這是因為SPI是只有5v輸出,
而ESP8266的電源必須3.0V至3.6V間,
所以多拉一條跳線接3.3v。
本魔測試過ESP8266接5v電源也是可以工作的
,只是有過熱燒壞的風險,或其他狀況,所以也不是很推薦這樣使用。


SPI腳位圖
本魔再對照過後認為將SPIDI改TX、SPICS改RX會比較好焊。

轉接圖
也就是轉接頭只焊3PIN,其餘兩PIN3.3v直接跳線。
本魔的方法是,將不需要的PIN腳拔掉,再將PIN腳折至相連。
焊接前
焊接後
當然,只有三根腳支撐是相當不牢固的!
所以本魔在中間灌入熱熔膠,固定並防止短路。
切記接上ESP8266時不要接反了,
為防止接錯本魔還貼了辨識用的紅紙。
熱熔膠及辨識用的紅紙



結束後就可以撰寫轉換的程式囉!

在86Duino libraries中的io.h有一個io_outpb,
io_outpb它是可以直接存取硬體IO的function
這function是非常低階的控制,
基本上是要到Hacker等級的才會玩的!
所以如果你不是Hacker的話就不要亂玩唷!
因為很重要所以要標紅字。

直接存取硬體IO的話就可以將你要的腳位切換成你要的功能,
所以首先要先去了解86Duino的IO Port,
可以在官方找到86Duino CPU的Datasheet(Vortex86EX Datasheet V1.4),
我們可以看到P306.文中的CrossBar Config Registers內有寫各功能的編號,
找出我們所需要的就是將COM1的TX、RX更換為SPI的CS、DI,
000001b COM1-TXD1
000010b COM1-RXD1
001001b SPI-CS1
001100b SPI-DI

而COM1的TX、RX及SPI的CS、DI的address分別為:
0x0A12 COM1 TX
0x0A13 COM1 RX
0x0A20 SPICS
0x0A22 SPIDI
如此一來我們就可以寫出接上轉接座的控制程式碼:

void setup()
{
 io_outpb(0x0A12,0x00); //enable COM1 TX pin
 io_outpb(0x0A13,0x00); //enable COM1 RX pin
 io_outpb(0x0A20,0x02); //SPICS to RX
 io_outpb(0x0A22,0x01); //SPIDI to DX
 Serial.begin(9600);
 Serial1.begin(115200);
}
void loop()
{
 while (Serial1.available()) {
  Serial.write(Serial1.read());
 }
 while (Serial.available()) {
  Serial1.write(Serial.read());
 }
}
Share:

0 留言:

張貼留言

技術提供:Blogger.

追蹤者