エントリー

カテゴリー「Arduino・AVR」の検索結果は以下のとおりです。

ページ移動

ESP8266開発ボードを作る

次回に「ESP-WROOM-02」を使おうとした時に,また回路図など探してブレッドボードに展開するのが面倒なので,偉そうなものではないが開発ボードを作っておくことにした

必要な仕様
  • プログラム書込みボタンとリセットボタン
  • 3.3V電源(USB電源から降圧させる)
  • 3.3ロジックのUSBシリアル変換
  • ESP-WROOM-02は取り外し可能(こうしないと意味がない)
  • LEDをIO15に接続(動作確認用)
準備

USBシリアル変換はaitendoのUSB-TTL変換キットを使う(既に制作済の物)

USB

このUSB-TTL変換キットは5Vロジックなので3.3Vロジックにする

CH340Gの仕様などを参照して3.3VをVCCに入れれば3.3Vとして動作するのを確認

パターンを見てみるとVCCに入るUSB5Vの部分をカットして3.3Vの3端子レギュレーターを経由しVCCに入れれば良さそう

パターン

他にカットできそうな場所が無かったのでココにしたが,削ったパターンのカスがUSBコネクタとの間に入り+-がショートするといった問題が起きて嵌った

パターンカット

入念に掃除して解決

ボードに実装

今回はブレッドボード基板を使ってみた

基板1

ミニブレッドボードを載せるためのスペースを作るため両端の空きに寄せて配置

基板

黒:リセットボタン

白:プログラム書込みボタン(押しながらリセットするとプログラム書込みモードとなる)

SWやLEDを配置するためパターンのカットも行った

基板裏

3端子レギュレーター(NJM2845DL1-33 3.3V800mA)は裏に配置

開発中

SDカードスロットを取り付けてプログラム開発中(AVR用のプログラムはCSの変更のみで動作した)

開発中

NTPで日時を取得できるのでタイムスタンプが使えそうだ

ロギング装置の作製とESP8266のセットアップ

ロギング装置の構想は前々からあるのだがロギングするようなシステム作ってないので着手しなかった

ところが今回作製した放電器はロギングの必要性が高いと感じログ装置を作製することにする

どう実現するか,基本スタンドアロンでのロギングするとして,装置毎(例えば放電器)にSDカード等を実装して保存する内蔵型か,UART通信などを経由してので外付け型となる

外付け型ならSDカード保存の他にフラッシュメモリー保存や無線通信にてクラウド保存も可能だし融通がききそう

そこで楽しめそうな外付け型でSDカードへのロギングをやってみることにした

SDログ

この装置は前にも似たような物を作製したことあるのでさくっと実験版は完成

SDカードは3.3Vロジックのため3.3V版Arduino(AVR)を利用したほうが回路が楽になる

外付けなのでプロトコルが必要となるが通信は無手順,ログの記録として開始と終了のみ決めた

 開始:@Begin

 終了:@End

ログ装置側のプログラム(簡単すぎだけど公開)

//    Serial Logging To SD Card
//
//    シリアル出力のロギングをSDカードに書き込む
//    シリアル:9600bps
//    SD:ファイル名は連番(Ex.log.1xxxx.txt)
//    プロトコル
//        @Begin. - @End.間をSDに書き込む
//    Ex.
//        @Begin.
//        ;Constant current : 500mA
//        ;End voltage : 1000mV
//        0, 1237, 0, 0
//        1, 1237, 499, 8
//        2, 1226, 501, 16
//        131, 1051, 499, 1088
//        @End.
//
#include <EEPROM.h>
#include <SPI.h>
#include <SD.h>

// SD card attached to SPI bus as follows:
// * MOSI - pin 11
// * MISO - pin 12
// * CLK  - pin 13
// * CS   - pin 10
// ※CS pinは使用しているシールドで変更する必要がある
//        イーサーネットシールドは 4
//        Adafruit のSDシールドは 10
//        Sparkfun のSDシールドは 8
//
//#define DEBUG        1

#define CSPIN        10                  //チップセレクト
#define LEDPIN        8                  //状態表示LED
#define BLINKTIME    1000                //点滅間隔

static char strBegin[] = { '@', 'B', 'e', 'g', 'i', 'n', '.', '\r', '\n', '\0' };
static char strEnd[] = { '@', 'E', 'n', 'd', '.', '\r', '\n', '\0' };

static uint16_t year = 2017;
static uint8_t month = 1, day = 1, hour = 19, minute = 0, second = 0;

static char fileName[16];                //ログファイル名

static boolean sd = false;               //SD書込み開始フラグ
static boolean light;                    //LED点灯フラグ
static int timer;                        //LED点滅時間カウンタ

static int getByte() {
    for(;;) {
        timer++;
        if(Serial.available()) {
            return(Serial.read());
        }
        delay(1);
        if(timer > BLINKTIME) {
            timer = 0;
            if(sd) {
                if(light) {
                    digitalWrite(LEDPIN, LOW);
                    light = false;
                } else {
                    digitalWrite(LEDPIN, HIGH);
                    light = true;
                }
            }
        }
    }
}

void dateTime(uint16_t *date, uint16_t *time) {
    // FAT_DATEマクロでフィールドを埋めて日付を返す
    *date = FAT_DATE(year, month, day);
    // FAT_TIMEマクロでフィールドを埋めて時間を返す
    *time = FAT_TIME(hour, minute, second);
}

static void makeFileName() {
    int fileNum = (EEPROM.read(0)<<8) + EEPROM.read(1);
    if(fileNum < 10000) fileNum = 10001;
    sprintf(fileName, "log%5d.txt", fileNum);
    //次のファイル番号
    fileNum++;
    EEPROM.write(0, fileNum>>8);
    EEPROM.write(1, fileNum&0xff);
}

void setup() {
    Serial.begin(9600);                    // 9600bpsでポートを開く
#ifdef DEBUG
//    Serial.println("Start");
#endif
    //SSピンは使用しない場合でも出力にしないとSDライブラリが動作しない
    //pinMode(SS, OUTPUT);
   
    //SDライブラリの初期化
    if(!SD.begin(CSPIN)) {
        Serial.println("SD Card failed");
        for(;;);
    }   
    //日付と時刻を返す関数を登録
    //登録することでファイルの作成日時や変更日時が記録できる
    SdFile::dateTimeCallback(&dateTime);

    //初期化正常で開始
    pinMode(LEDPIN, OUTPUT);
    digitalWrite(LEDPIN, HIGH);            //点灯
    light = true;
    sd = false;
    timer = 0;
}

void loop() {
    char c, buf[128];
    int n = 0;
    File dataFile;

    for(;;) {
        c = getByte();
        buf[n++] = c;
        if(c == '\n') {
            buf[n] = '\0';
            n = 0;
#ifdef DEBUG
//            Serial.print(buf);
#endif
            if(!sd) {
                if(!strcmp(buf, strBegin)) {
                    //sd write start
                    makeFileName();
                    if(dataFile = SD.open(fileName, FILE_WRITE)) {
                        sd = true;
#ifdef DEBUG
                        Serial.println("logging start");
#endif
                    } else {
                        //ファイルが開けなかったらエラーを出力
                        Serial.print("can not open ");
                        Serial.println(fileName);
                    }
                }
#ifdef DEBUG
                else {
                    //ignore string
                    Serial.print("ignore : ");
                    Serial.print(buf);
                }
#endif
            } else {
                if(!strcmp(buf, strEnd)) {
                    //sd write done
                    dataFile.close();
                    sd = false;
#ifdef DEBUG
                    Serial.println("logging done");
#endif
                } else {
                    //sd writting
                    dataFile.print(buf);
#ifdef DEBUG
                    Serial.print("sd wrt : ");
                    Serial.print(buf);
#endif
                }
            }
        }
    }
}

ログ装置側が動作してるかどうか判るようにLEDで通知(点灯:Reday,点滅:Logging)するようにした

・・・

さてボードに組み込もうかと思ったところで,どうせならってことで・・・

ESP-WROOM-02

いつか使おうと思いながら購入して置きっぱなしだった「ESP-WROOM-02」を取り出す(世間では「ESP-WROOM-32」が旬みたいだけど・・・)

いつもお世話になってるこちらを参考にしてブレッドボードに展開

ブレッドボード

ATコマンドで動作確認して(115200bps8N1,行末:CR+LF)

AT1

AT2

開発環境を整え(参考

IDE

プログラムを書き込み動作させることができた

注意点や嵌った事など

デフォルトでは「softAP」モードになっていて先ずは「station」モードに変更しないとWiFiが使えない(AT+CWMODE=1)

cc版でないとESPは扱えないのでダウンロードしてarduino.1.8.1を設定(和解統合されてIDEはorg版オンリーになったようだが),拙者はcc版だと何故か問題があったためorgを使っていたので,これまでのローカル設定が全部使えてない

尚,分裂時のorg版とは共存できるようなので良かった

ボード選択設定(追加)

ボード Generic ESP8266 Module
Flash Mode QIO
Flash Frequency 40MHz
CPU Frequency 80MHz
Flash Size 4M(3M SPIFFS)
Debug port Disabled
Debug Level なし
Reset Method 手動SWなら「ck」,自動の場合(スイッチサイエンスの開発ボードなら)「nodemcu」
Upload Speed 115200
シリアルポート シリアルポート番号

aitendo の Pro Micro 互換ボード(環境整備)

aitendo の Pro Micro 互換ボードをこちらを参考にWindows10で使えるようにした(「Pro Micro & Fio V3 Hookup Guide」を参照することにもなる)

上がATmega328P,コンパクト差が良く判る

micro

 

まず Pro Micro 互換ボードをマイクロUSBで接続

Pro Micro 互換ボード

するとWindows10ではドライバーのセットアップなしで使用できるようになる

ドライバーを含む必要ファイルを「FIO AND PRO MICRO DRIVERS」からダウンロードする

DL

展開すると以下となりドライバーは sparkfun\avr\signed_driver 配下にある(Windows10では必要ないようだ)

Pro Micro 互換ボードと接続が出来たら「arduino.org-IDE」(拙者はorgを利用)で使えるように環境を整備する

①「boards.txt」に Pro Micro を追加

ダウンロードしたArduino_Boards-masterの sparkfun\avr\boards.txt の promicro 部分を自分の環境に合わせて取り出す

拙者の場合はローカル用の「boards.txt」(こちら)があるので以下の定義を追加(このボードは5V版なので3.3V用は必要ない)

################################################################################
################################## Pro Micro ###################################
################################################################################
promicro.name=SparkFun Pro Micro

promicro.upload.tool=avrdude
promicro.upload.protocol=avr109
promicro.upload.maximum_size=28672
promicro.upload.maximum_data_size=2560
promicro.upload.speed=57600
promicro.upload.disable_flushing=true
promicro.upload.use_1200bps_touch=true
promicro.upload.wait_for_upload_port=true

promicro.bootloader.tool=avrdude
promicro.bootloader.unlock_bits=0x3F
promicro.bootloader.lock_bits=0x2F
promicro.bootloader.low_fuses=0xFF
promicro.bootloader.high_fuses=0xD8

promicro.build.board=AVR_PROMICRO
promicro.build.core=arduino:arduino
promicro.build.variant=promicro
promicro.build.mcu=atmega32u4
promicro.build.usb_product="SparkFun Pro Micro"
promicro.build.vid=0x1b4f
promicro.build.extra_flags={build.usb_flags}

######################### Pro Micro 3.3V / 8MHz ################################
promicro.menu.cpu.8MHzatmega32U4=ATmega32U4 (3.3V, 8 MHz)

promicro.menu.cpu.8MHzatmega32U4.build.pid.0=0x9203
promicro.menu.cpu.8MHzatmega32U4.build.pid.1=0x9204
promicro.menu.cpu.8MHzatmega32U4.build.pid=0x9204
promicro.menu.cpu.8MHzatmega32U4.build.f_cpu=8000000L

promicro.menu.cpu.8MHzatmega32U4.bootloader.extended_fuses=0xFE
promicro.menu.cpu.8MHzatmega32U4.bootloader.file=caterina/Caterina-promicro8.hex


############################# Pro Micro 5V / 16MHz #############################
promicro.menu.cpu.16MHzatmega32U4=ATmega32U4 (5V, 16 MHz)

promicro.menu.cpu.16MHzatmega32U4.build.pid.0=0x9205
promicro.menu.cpu.16MHzatmega32U4.build.pid.1=0x9206
promicro.menu.cpu.16MHzatmega32U4.build.pid=0x9206
promicro.menu.cpu.16MHzatmega32U4.build.f_cpu=16000000L

promicro.menu.cpu.16MHzatmega32U4.bootloader.extended_fuses=0xCB
promicro.menu.cpu.16MHzatmega32U4.bootloader.file=caterina/Caterina-promicro16.hex

②「pins_arduino.h」の設定

ダウンロードしたArduino_Boards-masterの sparkfun\avr\variants\promicro (フォルダ)をフォルダごと自分のarduino.org-IDE環境へコピーする(これがないとコンパイルでpins_arduino.hが無いよというエラーになる)

環境が整備できたらarduino.org-IDEを起動してツールメニューからボード,プロセッサ,ポートを選択

(ボード)

(プロセッサ)

(ポート)

テストプログラム(LEDの点灯)のコンパイル

int RXLED = 17;                // The RX LED has a defined Arduino pin
void setup()
{
    pinMode(RXLED, OUTPUT);    // Set RX LED as an output
                            // TX LED is set as an output behind the scenes

    Serial.begin(9600);        //This pipes to the serial monitor
    Serial1.begin(9600);    //This is the UART, pipes to sensors attached to board
}
 
void loop()
{
    Serial.println("tomosoft wu......");  // Print "Hello World" to the Serial Monitor
    Serial1.println("Hello!");  // Print "Hello!" over hardware UART

    digitalWrite(RXLED, LOW);   // set the LED on
    TXLED0;                        //TX LED is not tied to a normally controlled pin
    delay(500);                    // wait for a 500ms
    digitalWrite(RXLED, HIGH);    // set the LED off
    TXLED1;
    delay(1000);                // wait for a second
}

書込み完了

赤点灯

赤点灯

緑点灯

緑点灯

テストプログラムの実行はOK

aitendo の Pro Micro 互換ボード

aitendoから購入

ProMicro

ProMicro

ブレッドボードで直接実験できるarduinoの小さいボードが欲しいなってことで,aitendo の Pro Micro 5V/16MHz 互換ボードというのを見つけ,なんと¥700(税別)安い!から購入してみた

どうもこいつはarduinoとして正式に出されているものではなく,更にUNOでもMiniでもNanoでもなくLeonardo互換らしい(参考「安価なArduino互換機たち」)

もう少し調べて使ってみよう(続き

びんぼうでいいの

びんぼうでいいの

ついでにUNOボードをもう1枚あったほうが良さそうになったので「びんぼうでいいの」+「部品パック for びんぼうでいいの」CPUなしで¥500+¥250の¥750(税別)を購入

パーツは以下のとおり

パーツ

早速組み立てる

組み立て

動作確認のためATmega328P(新品)を準備

ATmega328P

新品なのでフューズビット設定とブートローダーをUncompatino(5V版)で書き込む(こちらのとおり

ブートローダー

載せ換えてLチカで動作確認

Lチカ

びんぼうで良い訳ではないが,これはこの価格で十分良い物だ

ページ移動

ユーティリティ

検索

エントリー検索フォーム
キーワード

過去ログ

Feed