ele-diary 趣味の電子工作ブログ

電子工作関係の記録です。

加速度センサモジュールMMA8451 をESP32につなぐ

f:id:pau2000:20171104155339j:plain

MMA8451モジュールは、githubにライブラリがあるので簡単に使えます。GitHub - adafruit/Adafruit_MMA8451_Library: Arduino library for the MMA8451 Accelerometer sensors in the Adafruit shop

D1miniでは問題なく動作しました。

しかし、SoftwareSerialと併用すると問題が発生。 正常にコンパイル完了しますが、書き込んで動作させるとうまく動きません。I2Cとして未接続となります。

ハッキリとしたメッセージが出ないので推測ですが、SoftwareSerialで使っている何かのリソースが競合しているように思います。

そこで、マイコンを一回り大きいESP32で試してみることにします。ところが、これもすんなりとはいきませんでした。

ESP32では、I2Cのピンを自由に選択することができます。

int SDA = 25;
int SCL = 26;
Wire.begin(SDA, SCL);

というようにbegin の引数にSDA,SCLのピン番号を入れます。

ESP32を考慮されていないMMA8451ライブラリにこの設定を加えてあげる必要があります。

ということで、

bool Adafruit_MMA8451::begin(uint8_t i2caddr) {
  //Wire.begin();
  Wire.begin( 17, 16);
  _i2caddr = i2caddr;

とすることで、正しくコンパイルできて実行もできるようになります。

ESP32Minikit

ESP32MiniKitは値段も手ごろだしピンが2列になってて面白いと思い、ためしてみました。

f:id:pau2000:20171028134054j:plain

が。。

f:id:pau2000:20171028134058j:plain なんだか不思議なエラーで書き込めず。Win10でもMacでも状況は変わらず。

検索して得られた情報を参考に、VCC-RST間に104のコンデンサ入れてみたが変わらず。 ちょっとすぐには解決策がありません。。様子見ですね。

Intel Jouleの立ち上げ

ひょんなことから Intel Jouleを入手しました! でもあまり情報がないので、まとめておきます。。

f:id:pau2000:20171024224130j:plain

起動には、12V2A以上のACアダプタが必要、とあります。さらにマイクロHDMI接続のモニタと、キーボードマウスが必要。USB-Cのハブ経由でつなぎました。 Linuxの起動画面が来て、その後いきなりコマンドラインになります。

startxfce4

GUIっぽい画面が立ち上がります。 ここからWifiを設定します。

Ostro-Linuxというものがはいってるらしいです。

https://ostroproject.org/documentation/howtos/ip-address-config.html

このあたりにしたがって、

$ connmanctl

$ connmanctl> enable wifi

$ connmanctl> scan wifi

$ connmanctl> services

ここで、周辺のWifiSSIDがリストアップされます。この中で、つなぐ対象を選んでコピペします。

$ connmanctl> connect wifi<MAC_ADDR><SSID_HEX>_managed_psk

とすると、PassPhraseを聞いてきますので、正しく入れてあげると、OKです。

Quitコマンドでconnmanctlのコンソールを抜けられます。 なんだかいろいろと、独特ですねえ。。

Aitendoのタッチセンサモジュール

 

タッチセンサモジュールを組んでみました。こんなやつです。

f:id:pau2000:20170817175219j:plain

Aitendo ではいつものことながら説明書は全くありません。 が、回路簡単なんで問題なしです。f:id:pau2000:20170817175226j:plain

付属の抵抗は実測1Kでした。タッチ電極とICの間に実装するものと思われます。 ICの方向が難題です。ちゃんとRH6030のデータシートを見るとわかります。データシートは結構中国語と英語ですが、ピン配置図なら何とかなります。 f:id:pau2000:20170817175223j:plain

付属のコンデンサは感度調整用。未実装で最高感度になります。

小型でいい感じなので、何かに使えそうです! f:id:pau2000:20170817175229j:plain

PIC32MX210xFの実験(PWM)

32bitタイマでPWMの実験をしてみました。

PWMの周期を変えていくサンプル。うねうね動きます。

回路図

f:id:pau2000:20170610161316j:plain

最低限でもこれくらいはいりそうです。電解コンデンサは内部のオシレータに必要です。VUSB3V3は、USBを使わないときに接続するようデータシートに指示があります。

コード

PIC32のTimer23(32ビットタイマ)の出力をOC1につないでPWMを実現しています。開発環境はMPLAB X IDE 3.50とXC32コンパイラPLIBはLecacyライブラリを使ってます。 harmonyという新しい開発環境があるんですが、あえて使っていません。ちょっと把握しづらいので。。

/*********************************************************************
 *
 *      PIC32MX210F016B test
 *
 *      Y.U 7/June/2017
 * 
 *  ********************************************************************/

#include <plib.h>
#include <stdlib.h>

// SYSCLK = 40 MHz (8MHz Crystal/ FPLLIDIV * FPLLMUL / FPLLODIV)
// PBCLK  = 40 MHz
#define SYSCLK  40000000L                      
#define SYSCLKdiv10MHz    (SYSCLK/10000000)    

// Configuration Bit
// DEVCFG3:
#pragma config IOL1WAY  = OFF           // Peripheral Pin Select Configuration
// DEVCFG2:
#pragma config FPLLODIV = DIV_2         // PLL Output Divider
#pragma config UPLLEN   = OFF           // USB PLL Enabled
#pragma config UPLLIDIV = DIV_2         // USB PLL Input Divider
#pragma config FPLLMUL  = MUL_20        // PLL Multiplier
#pragma config FPLLIDIV = DIV_2         // PLL Input Divider
// DEVCFG1:
#pragma config FWDTEN   = OFF           // Watchdog Timer
#pragma config WDTPS    = PS1           // Watchdog Timer Postscale
#pragma config FCKSM    = CSDCMD        // Clock Switching & Fail Safe Clock Monitor
#pragma config FPBDIV   = DIV_1         // Peripheral Clock divisor
#pragma config OSCIOFNC = OFF           // CLKO Enable
#pragma config POSCMOD  = OFF           // Primary Oscillator
#pragma config IESO     = OFF           // Internal/External Switch-over
#pragma config FSOSCEN  = OFF           // Secondary Oscillator Enable (KLO was off)
#pragma config FNOSC    = FRCPLL        // Oscillator Selection
// DEVCFG0:
#pragma config CP       = OFF           // Code Protect
#pragma config BWP      = ON            // Boot Flash Write Protect
#pragma config PWP      = OFF           // Program Flash Write Protect
#pragma config ICESEL   = ICS_PGx3      // ICE/ICD Comm Channel Select
#pragma config JTAGEN   = OFF           // JTAG Enable
#pragma config DEBUG    = OFF           // Background Debugger Enable

void delay_us(unsigned int usec);
void delay_ms(unsigned int msec);

#define _SUPPRESS_PLIB_WARNING

int main(void)
{

    //System Setting
    SYSTEMConfigPerformance(SYSCLK);    //????????
    mJTAGPortEnable(DEBUG_JTAGPORT_OFF); //PORTA is used I/O, JTAG port must be disabled.

    mPORTAClearBits( BIT_4 | BIT_3 | BIT_2 | BIT_1 | BIT_0 );
    mPORTASetPinsDigitalOut( BIT_4 | BIT_3 | BIT_2 | BIT_1 | BIT_0 );
    ConfigCNBPullups(CNB13_PULLUP_ENABLE);//RB13??????
    mPORTBClearBits( BIT_5 );           //RB5?Low?

    mPORTBSetPinsDigitalOut( BIT_5 );   //RB5???

    //delay_ms(2000);                     //2???
    mPORTBClearBits( BIT_5 );           //RB5?Low?

    
    OpenTimer23(T23_ON | T23_SOURCE_INT | T23_PS_1_1,256);
    
    OpenOC1(OC_ON | //PWM mode
      OC_TIMER_MODE32 | //32bit
      OC_TIMER2_SRC | //
      OC_PWM_FAULT_PIN_DISABLE, //
      128, //OCxRS
      128); //OCxR
    
    RPB4Rbits.RPB4R = 0b0101; //RB4->OC1
   

    int cnt1=0,cnt2=0;
    while(1)
    {
        mPORTBToggleBits( BIT_5 );     //RB5 toggle for test
        delay_us(50);
        cnt1++;
        
        if (cnt1==128){
            cnt1=0;
            cnt2++;
            SetDCOC1PWM(cnt2);             
            if (cnt2==255){
                cnt2=0;

            }
        }

    }
}


void delay_us(unsigned int usec){
    unsigned int i, delay;

    delay = usec * SYSCLKdiv10MHz;
    for(i=0; i<delay; i++){}
}

void delay_ms(unsigned int msec){
    unsigned int i;

    for(i=0; i<msec; i++)
        delay_us(1000);
}
'''[f:id:pau2000:20170610161316j:plain]

WeMOS D1 でLチカ

WeMOS D1はArduino互換で、Wifiが付いていて気軽に買えるモジュールです。

f:id:pau2000:20170307222417j:plain

普通にArduino開発環境で認識。

f:id:pau2000:20170307222401j:plain

f:id:pau2000:20170307222410j:plain

さくっとLチカできました。 色々検索したら、簡単にWifiにもつながりそうです!

DC昇圧回路の実験

簡単なDC-DCで昇圧する回路を実験してみました。発信源はPICで、ほぼLチカと同じ感じのソフトを書きます。

f:id:pau2000:20170116233119j:plain f:id:pau2000:20170116233123j:plain f:id:pau2000:20170116233127j:plain

不思議な波形ですが、それなりに電圧がでているようです。本当はコイル側にダイオードを入れるべきですね。 出力の2次側に整流、平滑回路を入れて波形をみてみようと思います。