電子工作

Wio Lite RISC-V の Wifi をつなげてみる

L チカができたので、続いて Wifi 接続を試してみます。ネットワークに繋ぐことができると可能性がググッと広がるのでテンションが上がります。

基本的には”Wio_Lite_RISC-VボードでWiFiを動かす“を見ながら進めれば Web 経由での LED オンオフまでできます。ただ、私の環境では pins_arduino.h が足りないと言われてエラーになってしまいました。

C:\Users\chiyama\.platformio\packages\framework-arduino-gd32v\cores\arduino\Arduino.h:36:10: fatal error: pins_arduino.h: No such file or directory

検索したところ、”Blink with a Wio Lite RISC-V with ESP8266” では二つの解決策が紹介されていて、そのうちの正統派と思われる足りないファイルを他から持ってくる方法をおこないます。

  1. ~/.platformio/packages/framework-arduino-gd32v/variants/wio_lite_risc-v ディレクトリが無ければ作成
  2. GitHub の sipeed/Longduino リポジトリから pins_arduino.h と pins_arduino.c を作成したディレクトリにコピー

これでビルドが成功するようになりました。ビルドが通ったらファイルを Wio Lite に転送して実行します。

シリアル経由で起動が確認できたら
ブラウザからアクセスして on を Submit すると
LEDが光った!!

これで、Wifi経由でのネットワークへの接続、Wio Lite 上で動いている Web サーバへのアクセス、ブラウザからの Wio Lite の LED 制御ができるようになりました。

電子工作

Wio Lite RISC-V をためす

秋月電子で 500 円という格安で Wifi つき RISC-V ボードが売っていたので確保してみました。

ググると先人が試した形跡が結構あるので、それを参考に作業を進めると比較的サクサクと進めることができます。ただ、当時からちょっと状況が変わっているのか私の手元では動かない部分もあったので、そのあたりは適宜勘を働かせながら進めていきます。

まずは、

などを参考に環境構築と一番簡単な L チカから始めます。

ドライバインストール

過去のドキュメントで紹介されているリンクが死んでしまっているようで、探すのに苦労しました。結局、ドライバはGigaDevice のページから取得できるものを見つけ、書き込みツールは GitHub の Seeed Document のリポジトリから見つけました。

GD32DfuDrivers_V3.6.6.6167.rar を展開したら、x64 ないしは x86 フォルダ内にある GD32DfuDrivers.exe を実行してドライバをインストールします。

GD32_MCU_Dfu_Tool_V3.8.1.5784_1.rar はボードにプログラムを書き込む際に使用するので、展開して置いておきます。

PlatformIOのインストール

Wio Lite RISC-V は PlatformIO に対応しているようなので、PlatformIO をインストールします。VSCode の EXTENSIONS で PlatformIO を探してインストールします。

プロジェクト作成

PlatformIO の画面から New Project でプロジェクトを作成します。Board で “Wio Lite RISC-V(SeedStudio)”、Framework で GigaDevice GD32V SDK を選びます。

プログラム作成

“Wio Lite RISC-V で Lチカ” に書かれている手順をベースにしています。

Project Example から longan-nano-blink を選択してLongan Nano 用Lチカのサンプルを入れます。

続いて、Wio Lite RISC-V の仕様に合わせて値を変更します。

#define LED_PIN GPIO_PIN_13
#define LED_GPIO_PORT GPIOC
#define LED_GPIO_CLK RCU_GPIOC

#define LED_PIN GPIO_PIN_8
#define LED_GPIO_PORT GPIOA
#define LED_GPIO_CLK RCU_GPIOA

とします。

以上です。全体像は以下の通りです。

include/systick.h

#ifndef SYS_TICK_H
#define SYS_TICK_H

#include <stdint.h>

void delay_1ms(uint32_t count);

#endif /* SYS_TICK_H */

src/systick.c

#include "gd32vf103.h"
#include "systick.h"

/*!
    \brief      delay a time in milliseconds
    \param[in]  count: count in milliseconds
    \param[out] none
    \retval     none
*/
void delay_1ms(uint32_t count)
{
    uint64_t start_mtime, delta_mtime;

    // Don't start measuruing until we see an mtime tick
    uint64_t tmp = get_timer_value();
    do {
    start_mtime = get_timer_value();
    } while (start_mtime == tmp);

    do {
    delta_mtime = get_timer_value() - start_mtime;
    }while(delta_mtime <(SystemCoreClock/4000.0 *count ));
}

src/main.c

#include "gd32vf103.h"
#include "systick.h"
#include <stdio.h>

/* BUILTIN LED OF LONGAN BOARDS IS PIN PC13 */
#define LED_PIN GPIO_PIN_8
#define LED_GPIO_PORT GPIOA
#define LED_GPIO_CLK RCU_GPIOA

void longan_led_init()
{
    /* enable the led clock */
    rcu_periph_clock_enable(LED_GPIO_CLK);
    /* configure led GPIO port */ 
    gpio_init(LED_GPIO_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, LED_PIN);

    GPIO_BC(LED_GPIO_PORT) = LED_PIN;
}

void longan_led_on()
{
    /*
     * LED is hardwired with 3.3V on the anode, we control the cathode
     * (negative side) so we need to use reversed logic: bit clear is on.
     */
    GPIO_BC(LED_GPIO_PORT) = LED_PIN;
}

void longan_led_off()
{
    GPIO_BOP(LED_GPIO_PORT) = LED_PIN;
}
/*!
    \brief      main function
    \param[in]  none
    \param[out] none
    \retval     none
*/
int main(void)
{
    longan_led_init();

    while(1){
        /* turn on builtin led */
        longan_led_on();
        delay_1ms(1000);
        /* turn off uiltin led */
        longan_led_off();
        delay_1ms(1000);
    }
}

プログラムができたら、ウィンドウ左下のビルドボタンでビルドします。

作成したプログラムの書き込み

ビルドに成功したら、作成したプログラムをボードに書き込みます。PlatformIO 経由でできるという記述があったものの、私の環境ではうまくいかなかったので先ほどダウンロードした GD32 MCU Dfu Tool を使用します。

ボード上のスイッチを USB コネクタ側に切り替えると書き換えモードに切り替わるので、リセットボタンを押します。
GD32 MCU Dfu Tool を立ち上げます。正常に認識されていると、DFU Device にデバイスが表示されます。

DL App file name で、(プロジェクト名)\.pio\build\wio_lite_risc-v\firmware.hex を選択し、OKボタンを押すとファイルが転送されます。

Download succesfully! と言われたら成功です。スイッチを元に戻してリセットボタンを押すと、1秒毎にLEDが点滅を繰り返します。



苺栽培マシーン

苺栽培マシーンの作成(2)制御装置の作成と組み立て

苗を育てる本体はできたので、定期的に水を流すための制御装置を作成します。

制御にはどのご家庭にも転がっている Raspberry Pi を使用し、一時間ごとに水を循環させます。

12Vの電源が必要だったので、これまたどのご家庭にも転がっているパソコン用の電源を流用しています(その後、ACアダプタにリプレースしています)。

まずは仮組して動作確認。回路がいろいろゴチャゴチャしているのは追々直していきます。

まだウォーターポンプ用のリレーしかついていないのでシンプルな構成です。将来的には液肥の濃度管理とか各種測定情報の蓄積もやっていきたいです。

制御部ができたら全体を組み上げます。

いい感じに組み上がったので苺の苗を移植して完成です。

苺栽培マシーン

苺栽培マシーンの作成(1)本体の作成

苺の苗が順調に育ってきているので、苺栽培マシーンを作ります。

水耕栽培と言っても色々と種類があって、溶液を貯めた水槽に植える方法や、根に溶液を噴霧する方法などあります。今回は設備がコンパクトにまとまって少ない床面積で多くの苗を植えることのできる、タワー型にしてみます。

まずは肝心要のタワー本体です。ホームセンターで資材を調達して作成したら風呂場で試運転します。



下部のバケツに溶液とウォーターポンプが入っていて、ポンプでタワーの中を通っているパイプを経由してタワー先端まで溶液を運んで上から流れるようになっています。タワーの穴一つに一株づつ苗を植えていきます。

苺栽培マシーン

苺の苗をポットに移す

苺の苗を10日ほど水に浸して置いたらいい感じに根が出てきたのでポットに移植します。今回は水耕栽培をするので、土を使わずにスポンジに植えることになります。

苗からは白い根が生えてきています。

ひたすらポットに移植します。この時に変色していたり状態のよくない葉は取っておきます。

移植するとこんな感じになります。

スポンジ部分が乾かないように、根がある程度延びてくるまで水に浸しておきます。

苺栽培マシーン

苺の苗の収穫

プランターに植えた苺を忙しさにかまけてほったらかしにしていたらランナーが伸びに伸びてジャングル化していたので整理したところ、60株ほど新しい苗を収穫することができました。せっかくなので、この苗を使って水耕栽培にチャレンジしてみることにします。

とりあえず行き場が無いのでベランダの手洗い場に水を張って収穫した苗を浸しておきます。しばらくすると根が出てくるので、一株づつポットに移植します。

60株が順調に育って苺の実がなれば、一株一粒だとしても60粒は食べられます。楽しみ楽しみ。

3Dプリンタ

Adventurer3 のキャリブレーションを詰める

何となく雰囲気で印刷ができるようになったところで、もうちょっと気合を入れて設定を詰めてみることにしました。

参考にしたのはAdventurer3の更に詳しい校正方法(異音・設定・Adventure3)。非常に詳しく手順がまとめられていてとてもわかりやすいです。

まずは、現状を知るために第一層目だけを印刷してみました。ゆうても一応キャリブレーションをしているし、そこそこできるんじゃないかと思いながらやった結果がこれです。

皺だらけで散々な結果です。これを、調整を繰り返すこと数回。以下のようになりました。

一目見ただけではほとんど段差は見られず、ほぼ真上から光を当てて確認してやっと印刷跡がわかるくらいにまで調整ができたことがわかります。右奥のピースの角、ちょうど印刷を開始する部分だけ荒れているのが気になりますがちょっと原因がわからず。

キャリブレーションが結構詰められたので、印刷精度を確認するために作ったデータをラフト無しで印刷してみました。

最初(奥側)は一層目がスカスカだったので次(手前)は一層目の充填率をちょっと上げたらいい感じになっています。一部、プレートにちゃんと喰い付かないでズレてしまっているところがありますが、これはデータの作り方で何とかなりそうなので良しとします。

3Dプリンタ

フィラメントケースを作る

日本の6月と言えば梅雨。梅雨と言えば湿気。そして、3Dプリンタ用フィラメントには湿気が大敵ということで、何はともあれとりあえず防湿機能付きのフィラメントケースを作りました。

とは言っても3Dプリンタを買ったばかりでどうやってデータを用意したらいいのか右も左もわからないので、まずは先人の知恵をお借りするということできたみりゅうじさんの Blog を参考にほとんどそのまま作ってみることにしました。

この記事と、記事の元になった麦茶さんの動画”【3Dプリンター】フィラメント乾燥&保管 防湿ケース“を見ながらパーツを揃えて組み立てればアッサリと出来上がります。

手始めに、小さいパーツをプリントしてみます。

これで一時間ちょっと。印刷後、プレートから取り外そうとしたらもげてしまったので瞬間接着剤でなおしています。笑。

ボチボチいい感じにできたので、大物の印刷をします。

印刷中。無事に印刷完了しました。これで8時間以上かかっています。時間がかかるとは聞いてましたが、かなりかかりますね。複数台体制で動かしたくなる気持ちがわかります。

そして組み上げた結果はこちら。

配置は要検討ですが、なかなかいい感じです。動きも問題ないようで、この状態で印刷しても正常に印刷してくれます。何より、印刷が終るたびにフィラメントを排出して乾燥剤入りの箱にしまう手間が無くなるのは嬉しいです。

最初は説明を読んでも具体的にどのような感じになるのか全く分からなかった 3D プリンタを使った物づくりの手順を一通り体験することで感覚を掴むことができました。