2022年7月21日 星期四

我的第二塊arduino--NodeMcu Lua WIFI V3

 



 

自買了第1塊板後,自我澎脹了

覺得開發板不就都那樣

供電接地數位腳類比腳

於是我又買了第二塊板子 

NodeMcu Lua WIFI V3

這塊板子最大的特色就是超便宜

市面上NodeMcu Lua還有V2板,買了以後才知道,V2是比較受歡迎的

原因就V2相容性比較好@@

 那時會買這塊是因為想作NRF24L01的母板

 NRF24L01

這個無線模組的最大特點就是他的通訊距離可到1100米

適合遠距離的遙控 

相比藍芽或WIFI距離長了1倍




#include "nRF24L01.h"
#include "RF24.h"

// Instantiate RF24 class with CE and CSN values
RF24 radio(2, 15);
// Address to devices comunicate each other (same in both)
const uint64_t pipe = 0xE8E8F0F0E1LL;
// A variable to hold some info
boolean testInfo = false;

void setup() {
// Setup serial output
Serial.begin(9600);
// Start RF
radio.begin();
// Setup the channel to work within, number 100
radio.setChannel(100);
// Open recept pipe
radio.openReadingPipe(1, pipe);
// Start to listen
radio.startListening();
}

void loop() {
// Wait until some data
if (radio.available()) {
// Read payload, and check if it finished
radio.read(&testInfo, sizeof(testInfo));
// Manage info
if (testInfo) {
Serial.println("We received positive!");
} else {
Serial.println("We received negative!");
}
}
// Wait a bit
delay(50);
}
#include <SPI.h>  這個專案看起來對初學者來說有點難,,,,,,先在網上抓些範例有空再測吧

2022年7月20日 星期三

ARDUINO初體驗--我的第1塊開發板ESP-WROOM-32




ESP-32 開發板2合1雙核CPU低功耗 (38針腳) SP32 集成了天線開關、射頻balun、功率放大器、低噪放大器、過濾器和電源管理模塊,整個解決方案佔用了最少的印刷電路板面積。2.4 GHz Wi-Fi 加藍牙雙模芯片 

 1.板載CP2102 穩定的USB轉TTL芯片

 2. 沉金工藝 

 3. 支持Windows系統(cygwin 和msys32模擬環境)和Linux 系統上的開發 

4. 支持ESP32-Ardu ESP-WROOM-32 是一款通用型Wi-Fi+BT+BLE MCU 模組,功能強大,用途廣泛,可以用於低功耗傳感器網絡和要求極高的任務,例如語音編碼、音頻流和MP3解碼等。 此款模組的核心是ESP32-D0WDQ6 芯片*,具有可擴展、自適應的特點。兩個CPU 核可以被單獨控製或上電。時鐘頻率的調節範圍為80 MHz 到240 MHz。

用戶可以切斷CPU 的電源,利用低功耗協處理器來不斷地監測外設的狀態變化或某些模擬量是否超出閾值。

ESP32 還集成了豐富的外設,包括電容式觸摸傳感器、霍爾傳感器、 低噪聲傳感放大器,SD 卡接口、以太網接口、高速SDIO / SPI、UART、I2S 和I2C 等。 CPU 和內存 ESP32-D0WDQ6 內置兩個低功耗Xtensa® 32-bit LX6 MCU。

片上存儲包括:

 • 448 KB 的ROM,用於程序啟動和內核功能調用。

 • 用於數據和指令存儲的520 KB 片上SRAM。 

• RTC 中8 KB 的SRAM,即RTC 慢速存儲器,可以在Deep-sleep 模式下被協處理器訪問。

• RTC 中8 KB 的SRAM,即RTC 快速存儲器,可以在Deep-sleep 模式下RTC 啟動時用於數據存儲以及被主CPU 訪問。 

• 1 kbit 的eFuse,其中256 bit 為系統專用(MAC 地址和芯片設置);其餘768 bit 保留給用戶應用,這些應用包括Flash 加密和芯片ID。

 • ESP-WROOM-32集成了4MB的SPIFlash


 以上是網路上所得的資訊,現在談談為什麼我會選這塊開發板

其實ARDUINO開發板好多種的

如果是想快速無痛的進入

應購入ARDUINO UNO ,網上資源很豐富,大多範例都是ARDUINO UNO完成。

當初選擇的時候因為需要使用藍芽,所以在什麼都不知道的情況底下,就購入了 ESP-WROOM-32,可想而知,遇到的情況就是要自己找WROOM與UNO對應的腳位。



 

影片是我的第1個專案,原先是想做個藍芽控制的遙控車,但當時不知DC馬達無法由開發板直接驅動,手上剛好有步進馬達驅動板。所以第1次就給 步進馬達了。使用的驅動板是ULN2003驅動板。

要讓步進馬達運作起來,嗯,好像比較方便的方式是去下載 ULN2003驅動板的函式庫,然後直接運用函式再加上自己想讓步進馬達運作的參數,但那時我好像無法成功編譯函式庫的程式,所以就直接找不用函式庫的程式,就讓步進馬達動起來了。

程式碼如下

-------------------------

int t= 100; /*速度控制*/

 void setup() { pinMode(12,OUTPUT); pinMode(14,OUTPUT); pinMode(27,OUTPUT); pinMode(26,OUTPUT); } 

 void loop() { 

digitalWrite(12,0); digitalWrite(14,0); digitalWrite(27,0); digitalWrite(26,1); delay(t); digitalWrite(12,0); digitalWrite(14,0); digitalWrite(27,1); digitalWrite(26,0); delay(t); digitalWrite(12,0); digitalWrite(14,1); digitalWrite(27,0); digitalWrite(26,0); delay(t); digitalWrite(12,1); digitalWrite(14,0); digitalWrite(27,0); digitalWrite(26,0); delay(t); 

}

-------------------------  

 pinMode宣告腳位的模式 

pinMode(12,OUTPUT)為12腳為輸出模式

digitalWrite(12,0)則使12腳輸出0V--/.由此得知,要插在數位輸出。

ESP-WROOM-32上數位輸出的腳位為GIOP12同類者皆可使用。如果步進馬達沒照想像中的轉動,可能是插錯腳位,或順序有誤。


有一件很幹的事情,就是一開始要在IDE裡下載驅動程式,才能正確抓到ESP-WROOM-32開發板,這還滿簡單的,但有件很難的事,就是編譯完成後,程式上傳到開發板的時候,在出現CONNECTTING...時,就是點點點的時候,要按一下開發板上的BOOT按鈕才可正常上傳,不然會出現找不到板之類的錯誤訊息。

我他媽的搞了一個晚上才發現這件事,逼逼毛逼央毛都快噴出來了。 


2022年7月9日 星期六

電動烤串機---步進馬達

 #include <Stepper.h>
/*
28BYJ-48 步進馬達     
    28:步進馬達的有效最大外徑是 28 毫米
    B:表示是步進馬達
    Y:表示是永磁式
    J:表示是減速型(減速比1:64)
    48:表示四相八拍
28BYJ-48 步進馬達的規格如下:
    單極兩種規格:DC 5V 及 12V
    直徑:28mm
    齒輪減速比(變速箱):1/64
    定子極數:上(8+8)、下(8+8)
    轉子極數:16
    步距角度:360 / 64 x 1/64 = 0.087890625(半步模式)
    中心抽頭(紅線)與輸入引腳之間的直流電阻:21Ω
    輸出軸步數/轉 = (8x4x2) x 64 = 4096(半步模式)
    最大速度 = 15~20 rpm
半步的減速比為 64:1 表示內部馬達轉動 64 圈,外部的軸才轉動 1 圈,可以算出內部馬達轉動一圈,外部軸心轉動角度為 360º / 64 = 5.625º。
若將 5.625º 乘以減速比得到輸出的解析度為:每步旋轉 5.625 x 1/64 = 0.087890625 度。由此算出若要讓外軸轉動一圈,內部馬達需要行走 360 / 0.087890625 = 4096 步。

[ULN2003驅動板]
旋轉步進馬達通常稱為驅動,可以是波浪驅動、全步驅動、半步驅動驅動三種之一:
1.全步波浪驅動(Wave Drive)時序為:D->C->B->A ,轉一圈需要四步,一次僅驅動一個線圈工作,較少的消耗。
2.全步驅動(Full-Step Drive)時序為:AB->BC ->CD ->DA ,轉一圈需要四步,一次激勵兩個線圈,在最大扭矩下,更高的電流換來的是更高的扭矩。
3.半步驅動(Half-Step Drive)時序為:A->AB->B ->BC ->C ->CD ->D ->DA ,轉一圈需要八步,可使用半步驅動以獲得更精確的運動。
*/
// change this to the number of steps on your motor
#define STEPS 100
#define STEPS2 100
// create an instance of the stepper class, specifying
// the number of steps of the motor and the pins it's
// attached to
Stepper stepper(STEPS, D5, D6, D7, D8);
Stepper stepper2(STEPS2, D1, D2, D3, D4);
// the previous reading from the analog input
int previous = 0;
int previous2 = 0;
void setup() {
  // set the speed of the motor to 30 RPMs
  stepper.setSpeed(30);
  stepper2.setSpeed(30);
}

void loop() {
  // get the sensor value
  int val = analogRead(0);
  int val2 = analogRead(0);
  // move a number of steps equal to the change in the
  // sensor reading
  stepper.step(val - previous);
  stepper2.step(val2 - previous2);
  // remember the previous value of the sensor
  previous = val;
  previous2 = val2;
}