Heltec Arduino教學-下載與安裝Arduino IDE,開始使用 Heltec CubeCell 撰寫我的第一隻Arduino

Delores Cetleh
11 min readAug 26, 2020

--

今天D桃要用 Heltec 系列產品來寫 Arduino 基礎教學-第一隻Arduino。首先是選擇開發軟體,D桃只會用官方的 Arduino IDE 之後有學新的方法再上來跟大家分享,它是一套跨平台應用軟體,不管是 Windows 或Mac,是大多數 Arduino 開發者所選用的整合開發環境,大家可以到 Arduino 官方網站免費下載。

選一下作業系統。

由於經費問題桃樂絲只能選擇 Just Down Load下載! 不好意思~

從下載的項目打開這個APP。

咕嚕咕嚕! Arduino 瘋狂開動中~

開好了就出現這個畫面。

然後我們要去下載支援Heltec的底層框架,到Arduino的參數設定裡添加Heltec框架。

點下 Preferences.. 就會出現下面視窗,選擇額外開發板管理員網址。

在彈出的視窗填入 https://resource.heltec.cn/download/package_CubeCell_index.json

2023/05/25 改成以下路徑檔案

https://github.com/HelTecAutomation/CubeCell-Arduino/releases/download/V1.5.0/package_CubeCell_index.json

如果還是找不到,也可以到官方的說明網站上去看看是不是又換網址了!

依次選擇 “工具” -> “開發板” -> “開發板管理員”

接下來出現這個嚇人的畫面,“不要害怕” D桃說給自己聽的 ^^

填上CubeCell 搜尋一下,按下CubeCell Development Framework開始安裝

咕嚕咕嚕開始安裝:D

居然裝了5分鐘… 終於好了^^

看看剛剛它在忙什麼!!

原來裝了這麼多板子的框架,今天就用 HTCC-AB02S (CubeCell-GPS) 來做Arduino 第一課 LED 明滅練習!

Arduino 第一課 LED 明滅練習

  1. 認識硬體
  2. 動工
  3. 收工

第一步 認識硬體

由於D桃我不想去動焊錫與面包板,我們就用板子上的LED來做實驗!首先找到我們板子上的LED!

然後找到電路圖,它說是IO8 會亮綠色的!(來源:Schematic diagram)

看起來它共用在SCL2與GPS OLED連接,應該是作為 I2C 資料傳輸時的指示燈吧! 這次我們借用一下應該沒關係!

第二步 動工

新增檔案

在setup()裡面貼上以下程式

pinMode(GPIO8, OUTPUT); // 這裡設定所要輸出的PIN腳模式

在loop()裡面貼上以下程式

//設定PIN8腳位為高電位 = 3V
digitalWrite(GPIO8, HIGH);
delay(200);//來延遲時間
digitalWrite(GPIO8, LOW);
delay(200);//來延遲時間

就像這樣

然後按下

程式就咕嚕咕嚕的開始編譯上傳到板子上了!

成果就像這樣

打完收工..

話說寫完後給愷哥看過… 咦… 板子上不是有顆大顆的LED 嗎? 為啥不用它點呢? 唉 !! 第一天就挖個洞 ..

Arduino 第一課 LED 明滅練習 (加餐) — SK6812

  1. 認識硬體
  2. 動工
  3. 收工

第一步 認識硬體

這顆LED是SK6812來歷不小喔! Google 一下這個東西,原來是內建控制器的三色燈,難怪這麼大一顆… 它還可以串起來像這樣來控制一整串的LED。挺酷的!

由於是單線的控制,它的0與1的表示就不是單純的High / Low

SK6812 的 0 / 1 表示

0 : 就是 High短一點(小於 50%) ; 1: 就是 High長一點(超過 50%) ; 最後就是Reset : Low .. (由於是3色燈 , 如果沒Reset 顏色就會疊上去)

那接下來要如何點個別顏色呢?

SK6812 資料結構

他的意思應該是 8 bit 的顏色控制亮度,按照G-R-B 給出0/1碼就好!由於我們只有1顆LED了解到這裡應該就可以了!下次拿到一整串的再來了解如何控制第二顆以後的LED!

第二步 動工

話說這次可要控制high/low寬度,可沒那麼容易。心想這麼難的應該有人寫過範例了吧!話不多說就到飯粒去找一下!咦..還真有!

接下來就快了~有一種考試抄答案的快感!

#include “CubeCell_NeoPixel.h”
CubeCell_NeoPixel pixels(1, RGB, NEO_GRB + NEO_KHZ800);

void setup() {
// put your setup code here, to run once:
pinMode(Vext,OUTPUT);
digitalWrite(Vext,LOW); //SET POWER
pixels.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
pixels.clear(); // Set all pixel colors to ‘off’
}
uint8_t i=0;

void loop() {
// put your main code here, to run repeatedly:

pixels.setPixelColor(0, pixels.Color(i, 0, 0));

pixels.show(); // Send the updated pixel colors to the hardware.

delay(200); // Pause before next pass through loop

pixels.setPixelColor(0, pixels.Color(0, i, 0));

pixels.show(); // Send the updated pixel colors to the hardware.

delay(200); // Pause before next pass through loop

pixels.setPixelColor(0, pixels.Color(0, 0, i));

pixels.show(); // Send the updated pixel colors to the hardware.

delay(200); // Pause before next pass through loop

i+=10;

}

直接編譯上傳咕嚕咕嚕的成果就出來了

終於收工^^

剛剛愷哥說要可以互動的比較好玩!就是按一下變一個顏色之類的。都要收工了又出個題目給我… 不過這應該不困難! 收工前做一下試試!

user button

這次可以利用HTCC-AB02S 的user button 來做控制!開始動工吧..

  1. 認識硬體
  2. 動工
  3. 收工

第一步 認識硬體

USER Button 跟 VBAT_ADC_Ctl 連接會接到單晶片裡的SWD_CLK(這是什麼鬼?) 唉! D桃掉進一個坑了.. 找了好久終於找到 VBAT_ADC_Ctl = P3_3 。看起來我們可以用P3_3來取得這個按鈕的狀態。

第二步 動工

接下來就簡單了!

void setup() {
// put your setup code here, to run once:
pinMode(GPIO8, OUTPUT); // 點綠色的小燈
pinMode(P3_3,INPUT); //P3_3 = VBAT_ADC_Ctl ; 為什麼不是 GPIO16 (D桃也不知道.. )
}

void loop() {
if(digitalRead(P3_3)==0) // 按下user button 就會接到地 也就是LOW
{
digitalWrite(GPIO8, HIGH);
} else {
digitalWrite(GPIO8, LOW);
}
}

第三步 收工

愷哥測試中

咦.. 又寫錯了! 是要控制彩色燈的.. Orz

立馬修改程式! 終於收工了 :P

#include “CubeCell_NeoPixel.h”
CubeCell_NeoPixel pixels(1, RGB, NEO_GRB + NEO_KHZ800);

void setup() {
// put your setup code here, to run once:
pinMode(P3_3,INPUT); //P3_3 = VBAT_ADC_Ctl ; 為什麼不是 GPIO16 (D桃也不知道.. )
pinMode(Vext,OUTPUT);
digitalWrite(Vext,LOW); //SET POWER
pixels.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
pixels.clear(); // Set all pixel colors to ‘off’
}
uint8_t i=10; //亮度
int colorCount=0;
void loop() {
// put your main code here, to run repeatedly:
uint16_t keyDownTime = 0;
while(digitalRead(P3_3)==0) // P3_3 = user button 為了避免雜訊干擾按鈕添加了這段程式
{
delay(1);
keyDownTime++;
if(keyDownTime>=70){
colorCount++;
if (colorCount > 2){
colorCount=0;
}
break;
}
}
if (colorCount==0){
pixels.setPixelColor(0, pixels.Color(i, 0, 0));
pixels.show(); // Send the updated pixel colors to the hardware.
}
if (colorCount==1){
pixels.setPixelColor(0, pixels.Color(0, i, 0));
pixels.show(); // Send the updated pixel colors to the hardware.
}
if (colorCount==2){
pixels.setPixelColor(0, pixels.Color(0, 0, i));
pixels.show(); // Send the updated pixel colors to the hardware.
}
delay(100);
}

參考資料:

  1. HTCC-AB02S (CubeCell-GPS) 開發板取得商店 https://heltecshop.com
  2. HTCC-AB02S (CubeCell-GPS)開發板線路圖 Schematic diagram
  3. SK6812 Datasheet

--

--