古人智慧

Just Do it!
上士聞道,勤而行之;中士聞道,若存若亡;下士聞道,大笑之。不笑,不足以爲道。
~ 道德經 41

「實現夢想不是追逐成功,而是在於賦予生命意義,人生中的每個決定與聲音都有其重要含義。」"The key to realizing a dream is to focus not on success but on significance — and then even the small steps and little victories along your path will take on greater meaning."
電視名人-歐普拉·溫芙蕾(OPRAH WINFREY)

搜尋此網誌

Translation

顯示具有 2.1 ESP8266 標籤的文章。 顯示所有文章
顯示具有 2.1 ESP8266 標籤的文章。 顯示所有文章

2018年4月22日 星期日

[NodeMCU] L293D Motor shield board 電機驅動擴展板 應用

NodeMCU來控制馬達電機做個履帶機器人是最近想要做的項目,雖然是很普通的項目,但是加上攝像顯示屏還有一些sensors應該是個很好的運動平台。

《把NodeMCU直接插上》

《插上後狀態》
看上這片L293D擴展板是因為可以直接用NodeMCU,而且把全部的I/O都外接與VccGround規劃在一起,是個不錯的多功能的擴展板。
但是~~收到這板子,要命了。。。。這擴展板的footprint尺寸與手上的NodeMCU不適配,手上的NodeMCU比較寬將近2mm。也因為這樣,這片擴展板就被擺在桌角。
今天剛好瞄到,拿到手上把玩了一下,突然靈光一現,用排針座!!!
是的,90°排針座的尺寸剛剛好,太棒了~~~
立馬用烙鐵焊上,大小通吃!!

《腳跑出床外。。。》

《90°排針座剛好》

《呵呵,大小通吃》
既然接上了,那就繼續把這擴展板徹底研究清楚。
找遍x寶都找不到這片擴展板的原理圖,只好用萬用電錶一條條量測,還好沒很多條。
下圖就是示意圖。
《L293D接腳與擴展版圖》

《正面解說圖》

《尺寸圖》

測試工具與設備

NodeMCU x1
L293D Motor Shield board 電機擴展板 x1
5-12v電機馬達
萬用電錶 x1
電源供應器 x1

測試code

/*
 * RegisHsu 2018-04-22
 * The L293D motor shield board for NodeMCU
 * Enable 1-2: nodemcu pin 1
 * Enable 3-4: pin 2
 * 1A: pin 3
 * 2A: internal control
 * 3A: pin 4
 * 4A: internal xontrol
 */

#define __NODEMCU__

#ifdef __NODEMCU__
// NodeMCU與ESP8266 pin對照表
// These are the pins for all ESP8266 boards
//      Name   GPIO    Function
#define PIN_D0  16  // WAKE
#define PIN_D1   5  // User purpose
#define PIN_D2   4  // User purpose
#define PIN_D3   0  // FLASH mode at boot time
#define PIN_D4   2  // TXD1 (Note: low on boot means go to FLASH mode)
#define PIN_D5  14  // HSCLK
#define PIN_D6  12  // HMISO
#define PIN_D7  13  // HMOSI  RXD2
#define PIN_D8  15  // HCS    TXD0
#define PIN_D9   3  // RXD0
#define PIN_D10  1  // TXD0

#define E1 PIN_D1  // Enable Pin for motor 1, every pin can be PWM in ESP8266
#define E2 PIN_D2  // Enable Pin for motor 2

#define I1 PIN_D3  // Control pin 1 for motor 1
#define I3 PIN_D4  // Control pin 1 for motor 2

#else
//      Name   GPIO    Function
#define PIN_D0   0
#define PIN_D1   1
#define PIN_D2   2
#define PIN_D3   3
#define PIN_D4   4
#define PIN_D5   5
#define PIN_D6   6
#define PIN_D7   7
#define PIN_D8   8
#define PIN_D9   9
#define PIN_D10  10

#define E1 PIN_D8  // Enable Pin for motor 1
#define E2 PIN_D9  // Enable Pin for motor 2

#define I1 PIN_D3  // Control pin 1 for motor 1
#define I3 PIN_D4  // Control pin 1 for motor 2

#endif

void setup()
{
  Serial.begin(115200);

  pinMode(E1, OUTPUT);
  pinMode(E2, OUTPUT);

  pinMode(I1, OUTPUT);
  pinMode(I3, OUTPUT);
  Serial.println("Setup already...");
}

void L_Wheel(int sp, bool s1, bool s2)
{
  analogWrite(E2, sp); // Enable as speed
  digitalWrite(I3, s1);
}

void R_Wheel(int sp, bool s1, bool s2)
{
  analogWrite(E1, sp); // Enable as speed
  digitalWrite(I1, s1);
}

int spd = 1020;
void loop()
{
  Serial.print("SPD=");
  Serial.println(spd);
  //FF
  Serial.println("FF...");
  L_Wheel(spd, HIGH, LOW);
  R_Wheel(spd, HIGH, LOW);
  delay(2000);
  L_Wheel(0, LOW, LOW);
  R_Wheel(0, LOW, LOW);
  delay(2000);

  //RR
  Serial.println("RR...");
  L_Wheel(spd, LOW, HIGH);
  R_Wheel(spd, LOW, HIGH);
  delay(2000);
  L_Wheel(0, LOW, LOW);
  R_Wheel(0, LOW, LOW);
  delay(2000);

  //FR
  Serial.println("FR...");
  L_Wheel(spd, HIGH, LOW);
  R_Wheel(spd, LOW, HIGH);
  delay(2000);
  L_Wheel(0, LOW, LOW);
  R_Wheel(0, LOW, LOW);
  delay(2000);

  //RF
  Serial.println("RF...");
  L_Wheel(spd, LOW, HIGH);
  R_Wheel(spd, HIGH, LOW);
  delay(2000);
  L_Wheel(0, LOW, LOW);
  R_Wheel(0, LOW, LOW);
  delay(2000);
  spd = spd - 100;
  if (spd < 200)
    spd = 1020;
}

視頻分享

2018年4月8日 星期日

[ESP8266] MicroPython + TFT-LCD

想找個小屏來做個有趣的玩具,前些時間買一套樹莓派3B包含攝像頭3.5“TFT-LCD
也用3D打印機做個漂亮的外殼。

好不容易把camera和屏的驅動都設定好,準備開始拿來做有攝像與顯示功能的Robot,結果樹莓派3B不給力,用沒多久就開始開機不順然後直接掛點,還好camera與3.5“屏都可用。
既然樹莓派3B掛點,但對這個3.5”屏非常有興趣想知道底層driver如何控制電阻式touch與TFT-LCD屏。手上有幾片ArduinoESP8266,心中在想是否可以用來學習點亮這個屏? 花了好幾天睡覺時間google很多相關這個屏的pinout電路原理圖,看來全球還真不少強人已經跑在前面好多,車尾燈都不見。。。
這屏的TFT driver是ILI9486,touch driver是XPT2046。在搜尋過程中,這個神人寫的driver驅動最厲害TFT_eSPI,幾乎把可接的LCD屏都寫好並優化加速。
雖然很完整,但是我是想要學習如何透過SPI控制LCD與Touch,能一步步下command觀察屏driver的反應,Python應該是最佳選擇。

前言 MicroPython

MicroPython真是不錯的project,用ESP8266跑起來還算順,但是memory的空間非常有限,我的pyhton code只要稍微多寫一些,就很容易就出現“MemoryError: memory allocation failed,xxxxxxxxx”。所以,MicroPython在ESP8266只能當做實驗作用,無法做成有用的產品。

材料設備

步驟一,NoteMCU與LCD接線

這個屏都是透過SPI配合幾根control pin如chip selectCommand-Datainterrupt來控制,接腳不多但是軟件開發似乎難度不低。。。
NoteMCU pinout%20pinout.pdf)
TFT-LCD pinout
NoteMCU     TFT-LCD
=======     ========
D8              TFT-CS(24)
D3              Command/Data(18)
D4              Reset(22)
D1              Touch-CS(26)
D7              MOSI(19)
D6              MISO(21)
D5              CLK(23)
+5              +5(2)
GND           GND(6)

TFT_CS = 15   # TFT Chip select control pin D8
TFT_DC = 0    # Data Command control pin D3
TFT_RST = 2   # Reset pin pin D4
TOUCH_CS = 5  # Touch Chip select control pin D1

NodeMCU與ESP8266 pin對照表

// These are the pins for all ESP8266 boards
//      Name   GPIO    Function
#define PIN_D0  16  // WAKE
#define PIN_D1   5  // User purpose
#define PIN_D2   4  // User purpose
#define PIN_D3   0  // FLASH mode at boot time
#define PIN_D4   2  // TXD1 (Note: low on boot means go to FLASH mode)
#define PIN_D5  14  // HSCLK
#define PIN_D6  12  // HMISO
#define PIN_D7  13  // HMOSI  RXD2
#define PIN_D8  15  // HCS    TXD0
#define PIN_D9   3  // RXD0
#define PIN_D10  1  // TXD0

#define PIN_MOSI 8  // SD1
#define PIN_MISO 7  // SD0
#define PIN_SCLK 6  // CLK
#define PIN_HWCS 0  // CMD

#define PIN_D11  9  // SD2
#define PIN_D12 10  // SD4

步驟二,下載MicroPython並燒錄到NoteMCU

下載Firmware,我選擇esp8266-20171101-v1.9.3.bin
依照以下指令,安裝ESP8266燒錄工具後,先將NoteMCU的flash清乾淨,然後燒錄MicroPython Firmware。
pip install esptool
esptool.py --port /dev/cu.usbserial erase_flash
esptool.py --port /dev/cu.usbserial --baud 460800 write_flash --flash_size=detect -fm dio 0 esp8266-20171101-v1.9.3.bin
如果沒發生任何錯誤,這MicroPython應該已經完整上傳ESP8266。按下NoteMCU板子上的reset後,MicroPython就開始作動。

步驟三,透過terminal進入MicroPython的對話模式

在MacOS環境,打開Terminal,輸入以下指令
screen /dev/cu.usbserial 115200
這時候應該進入MicroPython的對話模式,按幾下Enter會出現>>>的符號,表示NoteMCU準備接收下指令。輸入簡單指令測試
>>> print('hello esp8266!')
hello esp8266!
>>> import esp
esp.check_fw()
NoteMCU應該回應剛剛燒錄的Firmware version。
重要: 要退出screen,按下CTRL-A+CTRL-K然後回答yes即可退出

步驟四,上傳TFT-LCD的測試code

這是我寫的測試code,分享在GitHub。
那,如何從GitHub下載後如何上傳到NoteMCU?

步驟五,設定NoteMCU上網與File Transfer

輸入以下的code,讓NoteMCU連上家中Wifi AP。
import network
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect('<your ESSID>', '<your password>')
sta_if.ifconfig()
會回應類似的IP address
('192.168.0.2', '255.255.255.0', '192.168.0.1', '8.8.8.8')
這樣NoteMCU就應該連上Wifi AP。
再來就是上傳Python code,不然自己慢慢“摳”到死。。。
參考WebREPL設定

方法一

這個方法簡單,但是會影響PC/Mac上internet。

方法二(我喜歡的方法)

在MicroPython對話模式下這個指令,把WebREPL啟動(Enable)
import webrepl_setup
E啟動,再輸入簡單密碼。這個密碼是運用REPL上傳Python code都需要輸入。
下載REPL,然後解開zip file後在folder內下運行以下的指令就可以上傳Python code。
./webrepl_cli.py raspi35.py 192.168.0.2:/raspi35.py
輸入密碼後就上傳。

步驟六,執行上傳的Python code

最重要的部分出現啦。。。
輸入指令就可以執行剛上傳的code
exec(open("raspi35.py").read())
接下來就可以看到類似這樣的圖形在LCD上,就大功告成!!!

參考:

我的開發桌面~~

2016年12月19日 星期一

[ESP8266] TinyPlan + A4988 + NEMA39 stepper

3年前,因對陀螺儀產生興趣,著手製作2輪自平衡車來理解Gyro的原理與運用。一路跌跌撞撞終於完成,這項目讓我成為maker~~
3年後,我發現對gyro還需要深入研究,而且現在有ESP8266平台,CPU與memory都提升很多,應該可以做細膩的運算與動作,這也是這篇主要的部分。

先規劃系統方塊圖:
電路板是用承田電子的TinyPlan板子,TinyPlan是將ESP8266模組與USB還有reset電路整合,與Adruino IDE結合使用非常容易與方便。

為了確保ESP8266能透過A4988驅動步進電機馬達,我先把測試電路接起來,做了以下實驗。
《用我DIY的電源供應器,
5V接TinyPlan,
A4988則接另一12V電源》

《TinyPlan上ESP8266模塊》

《DIY的A4988測試板》

《視訊分享》

實驗結果一切正常。。。。

測試code:


#include "A4988.h"

// Motor steps per revolution. Most steppers are 200 steps or 1.8 degrees/step
#define MICROSTEP 16
#define MOTOR_STEPS (200 * MICROSTEP)

// All the wires needed for full functionality
#define ENBL 15
#define DIR_1 13
#define STEP_1 12

// microstep control for A4988
A4988 stepper_1(MOTOR_STEPS, DIR_1, STEP_1, ENBL);

long move_r = 360;
int dir = 1;
void setup() {
  /*
     Set target motor RPM.
  */
  stepper_1.setRPM(10);
  stepper_1.setMicrostep(MICROSTEP); // make sure we are in full speed mode
}

void loop() {
  /*
     The easy way is just tell the motor to rotate 360 degrees at 1rpm
  */
  stepper_1.rotate(move_r * dir);
  dir = dir * -1;
}


參考資料:
A4988 arduino Library download - 《here》

2016年7月22日 星期五

ESP8266 - TickerScheduler

這個library提供類似multitask的機制,還不錯用。做個記錄~

#include <tickerscheduler.h>
//Regis, tick task test
TickerScheduler ts(5);

void setup(void)
{
  Serial.begin(115200);
  Serial.println("Start");

  //Regis, tick task test
  if (ts.add(0, 5000, task1, true))
  {
    Serial.println("Tick task - task0 ok");
  }
  if (ts.add(1, 4000, task1, true))
  {
    Serial.println("Tick task - task1 ok");
  }
  if (ts.add(2, 3000, task2, true))
  {
    Serial.println("Tick task - task2 ok");
  }
  if (ts.add(3, 2000, task3, true))
  {
    Serial.println("Tick task - task3 ok");
  }
  if (ts.add(4, 1000, task4, true))
  {
    Serial.println("Tick task - task14 ok");
  }
}

void task0(void)
{
  Serial.println("Task0");
}

void task1(void)
{
  Serial.println("Task1");
}

void task2(void)
{
  Serial.println("Task2");
}

void task3(void)
{
  Serial.println("Task3");
}

void task4(void)
{
  Serial.println("Task4");
}

void loop(void) {
  ts.update();
}


upload到ESP8266,從terminal可以觀察到task0到task4依照設定到秒數把message印出來。
看來有機會做“類”多工的功能,蜘蛛Robot有機會做更高階的應用了~

2016年2月14日 星期日

[Study] ESP8266 - ESP-03 PCB轉板製作

去年買了兩片ESP8266板子﹣ESP-01 & ESP-03。
買ESP-03是看到有多一些GPIO可使用就多買一片來試看看,但是這片板子並無相容一般洞洞板的2.54mm孔距,所以要嘛就自己跳線或者洗板子來使用。

因此這片板子就躺在零件盒子好一段時間~~
趁著2016農曆年大假,也剛好Cyclone PCB雕刻機也完成,就來刻個轉接板來使用!
成果展示:



2016年2月13日 星期六

[Study] ESP8266 - ESP-01 PCB製作

每次看到PCB板子上面一堆導線,鋪天蓋地像蜘蛛網一般,都是裸露接點,不僅擔心短路,如果不小心線碰掉了,誤以為code寫錯而debug的死去活來,那更是糟糕!
所以,自己DIY一片ESP-01的實驗板來用,還不錯用!
秀一下化妝前後的效果:



2016年2月11日 星期四

[Study] ESP8266 - nodemcu + MQTT study(02/xx)

ESP8266是一款具備wifi與32bit mcu的高C/P值SOC,同好們似乎拿來做IOT devices居多。
以目前IOT架構來說,MQTT是目前傳遞data最常見的protocol運用。
做個詳細記錄,避免日後忘記,也可以分享同好,剛好沾沾IOT的潮流~~

MQTT主要精神如圖所示:

2016年2月8日 星期一

[Study] ESP8266 - nodemcu + Lua study(1/xx)

ESP8266 ﹣ ESP01放在櫃子一段時間都沒拿出研究,趁春節回老家休假時間來好好學習一番。用手機的彩盒來裝這個系統剛好,可以隨身帶不怕壓壞。
不過,接下來要做個PCB整合這些模塊才是。

2015年11月22日 星期日

[Study] ESP8266初體驗

小小一個module﹣ESP8266 便宜的 WiFi 晶片已經風靡maker界,我也隨著潮流買了2個,ESP01 & ESP03