ESP32と飛行機 1

f:id:itfune:20170502070110p:plain

材料

ESP-WROOM-32(8g)

TA7291P (3g)

モーター (種類により)

バッテリー (種類により)

発泡スチロール (形状次第g)

道具

ニクロム線と電池をつなげたカッター

 

機体

初号機

f:id:itfune:20170502071413p:plain

発泡スチロールを切っていきます。

f:id:itfune:20170502071514p:plain

初号機はこんな感じ。ハイパーダッシュモータを使用しましたがビクとも動きません。。。重すぎるようです。電池で50g。ハイパーダッシュモーターで17g。重い。

f:id:itfune:20170502071915j:plain

さらに、ESP32とブレットボードを乗せると140g。重い。。。これでは飛びそうもないです。(飛行機の形は子供の作です)

 

何事も先達はあらまほしきものかな。2号機

輪ゴムの動力で飛ぶ飛行機模型の重量はいかほど?飛ぶ飛行機の羽のかたちは?

製品版を買って勉強しましょう。

f:id:itfune:20170502072355p:plain

組み立てた後計量しました。20g!軽い。飛ばしてみたところ軽やかに飛ぶんです。軽さですね。

f:id:itfune:20170502072655j:plain

,モーターと部品、電池(リチュウム)の合計26g。2号機の機体と合わせて50g弱。

f:id:itfune:20170502072830p:plain

ブレットボードは意外と重いのでESP32は機体にじかづけするとして、部品を機体にとりつけて計測したところ。この状態で(まだ動力は輪ゴムです)飛ばしてみると、ヨロヨロしていますが一応飛びます。

モーターの出力を上げて、羽を工夫すれば飛びそうな予感がします。

2号機を研究して、自作の3号機を作ろう。

 

ESP-WROOM-32

こちらはblue toothを搭載しているようなのでスマホと通信させてモーターの出力を制御します。

 

電波が届かないところまで飛んで行ったら行ったっきりになりそうです。まずはテイクオフを目標にします。

 

 

 

電子工作 マイコン内蔵RGB 5mmLED

作るもの

IoTクリスマスツリー

今日は準備です。

 

材料

マイコン内蔵RGB 5mmLED

f:id:itfune:20161114200949j:plain

 

光ファイバーのツリー

f:id:itfune:20161114201123j:plain

 

作り方

まず、分解します。こうなってました。

f:id:itfune:20161114201219j:plain

マイコン内蔵RGB LEDを配線

真ん中に白っぽいLEDがあるのですが見えますか。

f:id:itfune:20161114201302j:plain

Arduinoにライブラリを追加します。

[スケッチ] > [ライブラリをインクルード] > [ライブラリを管理]

f:id:itfune:20161114201734p:plain

NeoPixelを検索してインストール

f:id:itfune:20161114202448p:plain

 

LEDを点灯するスケッチを書いて光ファイバーをかぶせる。

f:id:itfune:20161114202550j:plain

 

今日はここまで。次回、これをwifiで制御するようにします。

 

 

Domaを見る

さて、DomaでDBの内容に基づいて

classを自動生成しましたので内容をみます。

f:id:itfune:20161108174520p:plain

dao下にクラス(インタフェース)が出来ています。

でも、.aptのところが空っぽです。

ここにインタフェースの実体が出来る予定だったのですが

なにかが足りないようです。

たぶんgradleファイルなので見直して更新します。

 

(2016-11-12)

なにごとも先達はあらまほしきものかな

こちら

http://masatoshitada.hatenadiary.jp/entry/2014/12/03/214712

のサイトなどを参考にさせていただいて、

build.gradleを以下の形式にするとインタフェースの実態も作成されます。

Groovyの勉強をしたら以下のbuild.gradleを見直したいと思います。

 

 

apply plugin: 'java'
apply plugin: 'eclipse-wtp'
apply plugin: 'war'

sourceCompatibility = 1.8
version = '1.0'
jar {
    manifest {
        attributes 'Implementation-Title': 'Gradle Quickstart',
                   'Implementation-Version': version
    }
}

configurations {
    domaGenRuntime
}

repositories {
    mavenCentral()
}

dependencies {
    compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
    testCompile group: 'junit', name: 'junit', version: '4.+'
}

test {
    systemProperties 'property': 'value'
}

uploadArchives {
    repositories {
       flatDir {
           dirs 'repos'
       }
    }
}

eclipse {
    wtp {
        component {
            contextPath = '/Sample'
        }
    }
}

dependencies {
    domaGenRuntime 'org.seasar.doma:doma-gen:2.0.1'
    domaGenRuntime 'org.postgresql:postgresql:9.4-1206-jdbc41'
    compile 'org.seasar.doma:doma:2.0.1'
    compile 'org.seasar.doma:doma-gen:2.0.1'
    compile 'org.postgresql:postgresql:9.4-1206-jdbc41'
}

task gen << {
    ant.taskdef(resource: 'domagentask.properties',
        classpath: configurations.domaGenRuntime.asPath)
    ant.gen(url: 'jdbc:postgresql://localhost/smpl', user: 'postgres', password: 'password') {
        entityConfig(packageName: 'jp.co.smpl.entity')
        daoConfig(packageName: 'jp.co.smpl.dao', configClassName: 'jp.co.smpl.AppConfig')
        sqlConfig()
    }
}

ext { aptDir='.apt_generated' }

eclipse {
    jdt.file.withProperties { it['org.eclipse.jdt.core.compiler.processAnnotations'] = 'enabled' }
    classpath {
        containers = ['org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8']
    }
}

eclipseJdt {
    def clos = []
    def fp = file('.factorypath')
    outputs.file fp
    clos += {
        fp.withWriter {
            def domaJar = configurations.compile.find {
                it.name.startsWith('doma-2')
            }
            new groovy.xml.MarkupBuilder(it).factorypath() {
                factorypathentry(kind:'EXTJAR', id:domaJar, enabled:true, runInBatchMode:false)
            }
        }
    }

    def prefs = { name, contents ->
        def f = file(".settings/$name")
        clos += {
            f.text = contents.stripMargin()
        }
        outputs.file f
    }

    prefs 'org.eclipse.jdt.apt.core.prefs', """\
    |eclipse.preferences.version=1
    |org.eclipse.jdt.apt.aptEnabled=true
    |org.eclipse.jdt.apt.genSrcDir=${aptDir}
    |org.eclipse.jdt.apt.reconcileEnabled=true
    |"""
    doLast { clos*.run() }
}

Gradleプロジェクトの作成

今日はEclipseにGradleプロジェクトを作成します。

Gradleプロジェクトの作成

Eclipseを起動し[ファイル]-[新規]-[プロジェクト]と選択 し、
Gradle(STS)-Gradle(STS)プロジェクトを選択し次へ(N)>

f:id:itfune:20161105145224g:plain


プロジェクト名を「smplworkflow_j」に
サンプルプロジェクトを「Java Quickstart」に指定し[完了]

f:id:itfune:20161105145542g:plain


プロジェクトが作成された状態。

f:id:itfune:20161105145837p:plain

プロジェクトの設定変更

プロジェクトを右クリックして[プロパティー]→[Javaコンパイラー]の[コンパイラー準拠レベル]を[1.8]に変更してください。

f:id:itfune:20161105150048p:plain

再ビルドを促されるので[OK]してください。

 

サーバーの追加

[smplworkflow_j]を右クリック-[新規]-[その他]-[サー バー]-[サーバー]を選択

[Tomcat v8.0サーバー]を選択し[完了]

f:id:itfune:20161105150325g:plain

 

動的Webプロジェクトへの変換

 src/main直下に、webappフォルダを作成します。
[smplworkflow_j]-[新規]-[ソースフォルダ]を選択

f:id:itfune:20161105205447p:plain

 
フォルダ名に「src/main/webapp」を指定し[完了]

f:id:itfune:20161105205629p:plain

 

作成した[src/mian/webapp]を右クリック[新規]-[フォルダ]を選択し

f:id:itfune:20161105205902p:plain

フォルダ名に「WEB-INF」を指定し[完了]
以下のようになればOKです。

f:id:itfune:20161105210107p:plain

ファセットの追加

[smplworkflow_j]を右クリック-[プロパティ]-[プロジェクトファセット]を選択

より詳しい設定をクリック

f:id:itfune:20161105210644p:plain

[コンテンツディレクトリ]にsrc/main/webappを設定し

web.xmlデプロイメント記述子の生成にチェックを入れて[OK]

f:id:itfune:20161105210834p:plain

 ランタイムを3.1にして[OK]

f:id:itfune:20161105211133p:plain

build.gradleの編集

build.gradleを開いて以下を貼り付け。

apply plugin: 'java'
apply plugin: 'eclipse-wtp'
apply plugin: 'war'

sourceCompatibility = 1.8
version = '1.0'
jar {
    manifest {
        attributes 'Implementation-Title': 'Gradle Quickstart', 'Implementation-Version': version
    }
}

eclipse {
    // Dynamic Web Project
    wtp {
        component {
            // eclipse wtp context_path
            contextPath = '/smplworkflow_j'
        }
        facet {
            facet name: 'java', version: '1.8'
            facet name: 'jst.web', version: '3.1'
        }
    }
}

configurations {
    domaGenRuntime
}

repositories {   
    mavenCentral()
}

dependencies {
    domaGenRuntime 'org.seasar.doma:doma-gen:2.0.1'
    domaGenRuntime 'org.postgresql:postgresql:9.4-1206-jdbc41'
    compile 'org.seasar.doma:doma:2.0.1'
    compile 'org.seasar.doma:doma-gen:2.0.1'
    compile 'org.postgresql:postgresql:9.4-1206-jdbc41'
}

test {
    systemProperties 'property': 'value'
}

task gen << {
    ant.taskdef(resource: 'domagentask.properties',
        classpath: configurations.domaGenRuntime.asPath)
    ant.gen(url: 'jdbc:postgresql://localhost/smpl', user: 'postgres', password: 'password') {
        entityConfig(packageName: 'jp.co.smpl.entity')
        daoConfig(packageName: 'jp.co.smpl.dao', configClassName: 'jp.co.smpl.AppConfig')
        sqlConfig()
    }
}

AppConfig.javaの作成

[smplworkflow_j]を右クリック-[新規]-[クラス]を選択

f:id:itfune:20161105213752p:plain

 

 パッケージに「jp.co.smpl」

名前に「AppConfig」を設定し[完了]

f:id:itfune:20161105213841p:plain

 

 

AppConfig.javaを開き以下を貼り付け。

package jp.co.smpl;

import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

import org.seasar.doma.SingletonConfig;
import org.seasar.doma.jdbc.Config;
import org.seasar.doma.jdbc.dialect.Dialect;
import org.seasar.doma.jdbc.dialect.PostgresDialect;
import org.seasar.doma.jdbc.tx.LocalTransactionDataSource;
import org.seasar.doma.jdbc.tx.LocalTransactionManager;
import org.seasar.doma.jdbc.tx.TransactionManager;

@SingletonConfig
public class AppConfig implements Config {

    private static final AppConfig CONFIG = new AppConfig();

    private final Dialect dialect;

    private final LocalTransactionDataSource localTransactionDataSource;

    private final TransactionManager transactionManager;

    private AppConfig() {
        try {
            dialect = new PostgresDialect();
            DataSource dataSource = (DataSource) InitialContext.doLookup("java:comp/env/jdbc/postgresql");
            localTransactionDataSource = new LocalTransactionDataSource(dataSource);
            transactionManager = new LocalTransactionManager(
                    localTransactionDataSource.getLocalTransaction(getJdbcLogger()));
        } catch (NamingException e) {
            throw new RuntimeException(e);
        }
    }
    @Override
    public Dialect getDialect() {
        return dialect;
    }
    @Override
    public DataSource getDataSource() {
        return localTransactionDataSource;
    }
    @Override
    public TransactionManager getTransactionManager() {
        return transactionManager;
    }
    public static AppConfig singleton() {
        return CONFIG;
    }
}

 

web.xmlとServer.xmlの編集

f:id:itfune:20161105214445p:plain

web.xml

最下部に以下を挿入する

  <resource-ref>
    <res-ref-name>idbc/postgresql</res-ref-name>
    <res-type>java.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
  </resource-ref>
</web-app>

 

Gradleタスクの実行

[smplworkflow_j]を右クリック-[Gradle(STS)]-[タスククイックランチャー]を選択
タスク: gen
を指定し'Enter'を押す

f:id:itfune:20161105215037g:plain

DB操作をするclassとsqlが自動生成されます。
これでgradleプロジェクトの作成は完了でございます。

電子工作 Arduino Leonardoみたいなものの動作確認

休日は電子工作に取り組みます。

今日は来週の勉強会で使うために中国から買ったArduino Loenardoみたいなものの動作確認をします。勉強会に参加される方ように15個も買いました。みなさんのパソコンはMacUbuntuWindowsと様々ですので一通り試しておきます。

 

今日作るもの

MacUbuntuWindowsそれぞれでArduinoにスケッチ(プログラム)を書き込みLEDをチカチカさせること。

材料

f:id:itfune:20161105013823j:plain

出来上がりイメージ

WindowsMacUbuntuそれぞれでLEDをチカチカできること。

 

 

Windows

パソコンとArduinoをUSBケーブルで接続します。

Arduino IDEを起動し

[ツール] > [ボード] > [Arduino Leonard] を選択します。

f:id:itfune:20161105012321p:plain

 

[ツール] > [シリアルポート] > Arduinoと接続しているUSBケーブルを抜き差しして反応するCOMポートを選択します。

f:id:itfune:20161105012520p:plain

スケッチの書き込み

[ファイル] > [スケッチの例] > [01.Basics] > [Blink] を選択します。

f:id:itfune:20161105012659p:plain

 

プログラム中の

24行目:pinMode(2, OUTPUT); と編集します。

29行目:digitalWrite(2, HIGH);   と編集します。

31行目:digitalWrite(2, LOW);  と編集します。

 

下図の丸囲みのボタンをクリックしてスケッチ(プログラム)をArduinoへ書き込みます。

f:id:itfune:20161105013151p:plain

 

動作確認

2番ピンを使います。

LEDが点灯している様子が見えにくいですが、点灯しています。

f:id:itfune:20161105013934j:plain

windowsでの動作確認はOKでございます。

 

Mac

パソコンとArduinoをUSBケーブルで接続します。

Arduino IDEを起動し

[ツール] > [ボード] > [Arduino Leonard] を選択します。

f:id:itfune:20161105014753p:plain

 

[ツール] > [シリアルポート] > Arduinoと接続しているUSBケーブルを抜き差しして反応するポートを選択します。

f:id:itfune:20161105014835p:plain

 

スケッチの書き込み

[ファイル] > [スケッチの例] > [01.Basics] > [Blink] を選択します。

f:id:itfune:20161105012659p:plain

 

プログラム中の

24行目:pinMode(3, OUTPUT); と編集します。

29行目:digitalWrite(3, HIGH);   と編集します。

31行目:digitalWrite(3, LOW);  と編集します。

 

下図の白丸囲みのボタンをクリックしてスケッチ(プログラム)をArduinoへ書き込みます。

f:id:itfune:20161105015102p:plain

 

動作確認

3番ピンを使います。

LEDが点灯している様子が見えにくいですが、点灯しています。

f:id:itfune:20161105015609j:plain

Macでの動作確認はOKでございます。

 

Ubuntu

パソコンとArduinoをUSBケーブルで接続します。

sudo でArduino IDEを起動し

[ツール] > [ボード] > [Arduino Leonard] を選択します。

f:id:itfune:20161105071550p:plain

 

[ツール] > [シリアルポート] > Arduinoと接続しているUSBケーブルを抜き差しして反応するポートを選択します。

f:id:itfune:20161105071757p:plain

 

スケッチの書き込み

[ファイル] > [スケッチの例] > [01.Basics] > [Blink] を選択します。

プログラム中の

24行目:pinMode(4, OUTPUT); と編集します。

29行目:digitalWrite(4, HIGH);   と編集します。

31行目:digitalWrite(4, LOW);  と編集します。

スケッチ(プログラム)をArduinoへ書き込みます。

動作確認

4番ピンを使います。

f:id:itfune:20161105081050j:plain

 

LEDが点灯している様子が見えにくいですが、点灯しています。

Ubuntuでの動作確認はOKでございます。

 

 

Postgresにデータ投入 COPYコマンド

PostgreSQLにサンプルデータを登録します。

PostgreSQLにデータをロードするにはCOPYコマンドを使用します。

 

こちらにサンプルデータ.tsvとCOPYコマンドを記した.sqlを置きました。

https://github.com/sasakiyo/smplworkflow_doc.git

こちらのdataフォルダの.batを実行すると先日作成したテーブルにデータがローディングされます。

.batをダブルクリックするだけでございます。