ESP-IDF 環境構築

ESP32をArduinoIDEよりも深く?
使えるESP-IDFの環境構築方法のメモ

環境:Windows10 Home

ここから toolchain と MSYS のzipもらってくる
http://esp-idf.readthedocs.io/en/latest/windows-setup.html
Cドライブ直下に解凍、/c/msys32 という名前のフォルダができる

Cortanaの検索窓にでもC:\msys32\mingw32.exeと入れて実行

bashが使えるようになったらコマンドを順番に打ってく
$ cd /bin
$ ./rebaseall
$ cd /c
$ git clone --recursive https://github.com/espressif/esp-idf.git
$ exit

/c/msys32/etc/profile.dの下にadd_IDF_PATH.shというファイルを新規作成
内容はexport IDF_PATH=”/c/esp-idf”としておく

/c/Users/ユーザー名/Documents/esp32/とか適当にフォルダ作る
プロジェクトの格納先。

C:\msys32\mingw32.exeもう一回実行

$ cd /c/Users/ユーザー名/Documents/esp32/
gitからLチカのサンプルもらってくる
$ git clone https://github.com/espressif/esp-idf-template.git
$ cd /c/Users/ユーザー名/Documents/esp32/esp-idf-template

シリアルポート設定する
$ make menuconfig
Serial flasher config>Default serial port
COMなんたらに変更
Exit。

ビルドする。
$ make

ちなみにサンプルのLチカのIOは4なので4にLEDでもつないどく

書き込み。dev.kitなので特にボタン押さなくてOKだった
$ make flash
終了。

PHP5からPHP7.2へアップデートしました

ブログ作ってすぐの時PHP7入れようとして何か失敗したのがトラウマで

PHP5を入れて使っていたのですが(このVPSに)

危ないからやめろ、と警告が出たので、おそるおそるあげてみました

あのときと同じことにならないように、一応、バックとった。

れっつチャレンジ

~$ sudo apt-get install software-properties-common
~$ sudo add-apt-repository ppa:ondrej/php
~$ sudo apt install php7.2 php7.2-common php7.2-cli php7.2-fpm php7.2-mysql libapache2-mod-php7.2
~$ sudo service apache2 stop
~$ sudo a2dismod php5
~$ sudo a2enmod php7.0
~$ sudo service apache2 start

終わり、上手くいったd( ̄  ̄)

それにしてもPrismの拡張、Markupじゃないから無印にしたいなあ…

仮想環境上mitakaとの接続方法

仮想環境製作用クライアントインストール

https://www.vmware.com/jp/products/workstation-player/workstation-player-evaluation.html

ここからVMware WorkStation Player 15を落とす

非商用の時だけタダ

Windows(評価版)インストール

https://www.microsoft.com/ja-jp/evalcenter/evaluate-windows-10-enterprise

Windowsのプロダクトキーなしで90日使えるやつを落とす

仮想マシン設定方法

1,VMWareを起動

2,”新規仮想マシンの作成”を選択

3,後でOSをインストールを選択、次へ

4,ゲストOS、MS Windowsを選択、次へ

5,仮想マシン名、適当に、次へ

6,ディスクサイズ60GB、仮想ディスクを単一のファイルにを選択、次へ

7,完了、クリック

8,作ったWindowsの設定編集画面を開く

9,CD/DVD(SATA)の設定画面、デバイスのステータス、起動時に接続

10,ISOイメージファイルを使用で、落としたWinのファイルを参照

11,ネットワークアダプタの設定画面、接続方法、ブリッジに変更

12,物理ネットワーク接続の状態を複製を、OFF

13,設定保存、仮想マシン起動、Winインストール

14,仮想マシンにMitakaをホストマシンからコピー

15,Mitakaのマニュアルに従ってホストOSのmitakaとTCP/IPで接続

「報告」GR-LYCHEE DESIGN CONTEST 7位とコア賞を頂きました

http://gadget.renesas.com/ja/contest/2018/

テーマ: 
「カメラやIoTで課題を解決」 
高齢化社会や生産年齢人口の減少といった社会的課題に対し、人間の目の役割を果たすカメラ、インターネットによる付加価 値の向上に焦点を当てます。このため、カメラと無線通信を標 準搭載し、OpenCVやe-AI(組込み人工知能)も使用可能な「GR- LYCHEE」をアイテムとします。

ルネサスエレクトロニクス社のGR-LYCHEE DESIGN CONTESTにファイナリストとして参加しました。豊洲での最終選考に参加したので報告します

結果は7位でした。株式会社コアさんからスポンサー賞をいただきW受賞、新潟からはもう1チーム出場して、5位とテーマ賞をW受賞したので、県勢で4つの賞を取ることができました。

試作

工場の中や避難所などで運搬してくれる道具を作りました。似たようなものはもう市場にたくさんありますが、安く作れるかチャレンジしました。

初めの試作品は中華製ロボット掃除機を改造して構成しましたArduinoのIRremoteライブラリを使って掃除機の赤外線リモコン信号をハック、QRコードを認識して進行方向を決めるものです。Blynkサーバーを通してSiriからの制御ができ、Apple Watchから指示が出せるのがウリでした。

改良版

元の制御の流用なので方向のバリエーションを増やすため、いちから筐体を作りました。初CAD、学生は無償で使えるFusion360を使いました。

改造版で、このUbuntuサーバーと通信して、ネットワーク経由でデータをリアルタイムで送れる仕組みも作りました。

python3系と2系を同時に使うことも今回初めてやってみました

たくさん新しいことにチャレンジしたので複雑になりましたが最後はこんな感じで仕上がり、ファイナルに臨みました

#私の
#新潟県勢反省会 #もう1チームは巨大なものを作っていました!(ここには写ってない)

受験生としてのやりたいことも多いので、当日の発表スライドを載せその他どんな機能をつけたかは割愛します

周りの皆さんは実際に仕事で組み込みをやっている方々で、そんな中でファイナリストとして豊洲まで行かせてもらったことは本当に良い経験でした。筑波大学の方と実際にお話できたり、関東方面の光線について聞くことができたのも大きかったです。話力に後悔があるので、これから場数をもっと踏んでいければと思います。

コア賞でいただいたロボットアームは、主権が終わったあとVRとの組み合わせに挑戦したいと思っています

NDS 長岡IT開発者勉強会 参加してきました

NDS 長岡IT開発者勉強会 のまとめです

はじめに

先日新潟市内で開催された” Code for Japan Summit 2018 “の際に
NDS主催の@civicさんからお誘いをいただき
初参加・発表してきました

NDSは知る人ぞ知る新潟県内の有名なコミニュティで
長岡市で技術系勉強会を開催しています

参加者は発表スライドを公開して
ブログを書いてまとめると
NDSが終わりになるようです( ・∇・)

感想や発表したことについてまとめます

http://nagaoka.techtalk.jp/no57

NDS57テーマ「学習・教育」
機械の学習でも、ディープな学習でも、人間の学習や教育でも
なんでも学習・教育に関係することならばOK!

 

印象が強かったセッション

新入社員研修の作り方~完全版~ @masaru_b_cl さん

IT企業の新入社員研修についてのセッションでした
3ヶ月でC#を学ぶそうです。ぼくはUnityでC#初めて触ったのですが
C#ができるとJavaとかだいたい書けるからC#なんだそうです
リーダブルコード研修で受けたい!

 

Google Colabで試す、Kerasを使った画像認識 @kasacchiful さん

Jupyter Notebookっぽい感じでGPUが無料で使えてGPGPUできる
Google Colaboratoryというクラウドサービス上で
Tensorflow+Kerasで教師あり学習をさせて
Kerasで推論させよう
ということだったようです(難しかった!)

学習データは
①柿の種
②笹団子
③イタリアン(「フレンド」「みかづき」は区別しない)
④万代シティバスセンターのカレー
の4種類

実際に行って食べて写真撮ってきたらしいです( ・∇・)

機械学習勉強中なうなうなので
すごく新鮮でした
今日の時点だと
ゼロから作るDeepLearning
と言う本の勾配法のあたりまで読み進めていて
習っていない微分に苦戦しています
高校生になったらGPGPUとかCUDAとかで本格的にできるようになりたい

 

はじめてのOSSライブラリ開発記 @yuw27b さん

https://drive.google.com/file/d/1_W_8rHkCCawWD4EJHcf_IX5iMsaRPkE6/view

サーバーにHTTPで数百GBのデータをアップロードするためのOSS作っている
細胞一個検査すると1GBくらいのデータになって
平均するために100人からデータ取ると100GB
それをHTTPでサーバーに送信して実験データを閲覧できるようにする
ということだそうです

そのために某大学に100TBのストレージを持つサーバーを用意しました

とのことで会場が「・・・」となっていました
コードの可読性を検査することできるソフトとか
OSSでなくても使えそうなものたくさん紹介していて
使ってみたいと思いました

 

そのほかにも
SIerの社内教育のセッション
ITマスターについて
オンライン英会話のセッションや
レガシーWebシステム
リアルタイムでコード記述実演するセッション
(コードスニペットでコードを丸々辞書登録するの良かった)
学校教育とICTの関わり方についてのセッションや
LTも4本あったり(サーバーセキュリティのお話、ちゃんと勉強したい)

NDSテーマに沿ってたくさんお話が聞けて面白かったです

実は発表してたぼくのセッション

今までちょこちょこやってたサーバー立てとか
UnityとかWebSocketとかは
無関係に遊んでたところもありますが
MEIというプロダクト名の機械学習系のものになる予定です

第6回IoTLTNiigataでのスマートスピーカー漫才で
スマートスピーカーは五感のうち聴覚のみ
それもトリガーワード認識後という制約が
あることに改めて気づきました
消費電力の関係???

そこで、情報量の差がなくなっていけば
より深く会話を楽しめるので
その足りない五感をカメラ、マイク、触覚フィードバック等で
補って、スマホの画面に人型モデルを持つ人工知能を
AR(拡張現実)を組み合わせて現実世界の空間に描いて
会話していて楽しい人工知能を作ろうと考えました
そのためにUnity等を組み合わせて実験中です

iPhoneX以降のiPhoneに搭載されているTrueDepthカメラと
iOS12のARKit2のAPIを組み合わせることができれば
拡張現実側から現実の視線を読んだりもできるかも
みたいな発表をしました

長岡技科大や長岡高専などで視線認識げ研究されていることを
教えていただきました

終わりに

改めてNDSに招待していただいた@civicさんありがとうございました
貴重な経験になりました

良い発表ではなかったかと思いますが
場数を踏んでいきたいと思っています
ありがとうございました

スペースキーじゃなくてInputFieldで

Unityで入力した文字列をサーバーに送信できるようにする

 

WebSocket Unityとサーバーの双方向通信 Unity編

この記事で書いたものをレベルアップ
リンク先のものは、スペースキーの入力を通知していますが
今回はUIで入力された文字列をサーバーに送信するようにする

用語整理

Unity
統合開発環境を内蔵したゲームエンジン
2Dはもちろん、3DやVR用アプリケーションも作ることができる
Web,iOS,Androidなど様々な機器向けにデータをエクスポートできる

WebSocket
HTML5に定義されている技術規格
クライアントとサーバー間に「ソケット」と呼ばれる
持続的な接続を確立させることで
双方向からデータの送信を開始できるようになる(らしい)
基本的なHTTPだとクライアントからだけしか
データの送信を開始できない

( Unity ) websocket-sharpライブラリ
Unityで使用するC#用ライブラリ
WebSocketが簡単に作れるようになっている
ここからダウンロードできる

Visual Studio
MicrosoftのIDE
Unityをダウンロードすると一緒についてくる
Unity2018からのUnityで使うメインエディタ

InputField
Unityのオブジェクトの一つ文字列が入力できる
子要素にTextオブジェクト、Placeholderオブジェクトがある

実装

websocket-sharpライブラリインポート

websocket-sharpライブラリのビルドは
前回の記事に書いてあるので省略

テスト用Unityプロジェクトを作成( 2D )

Assetsに子ディレクトリPluginsを作成
Assets/Plugins内にビルドしたwebsocket-sharp.dllをコピー

websocket-sharpライブラリインポート終了

ここまでは前回と同じ

 

InputField配置

HierarchyにInputFieldを配置

Create > UI > InputField

追加された
Canvasが自動で生成されてその子になっている

 

スクリプト作成

新規スクリプトを作成

Assets > Create > C# Script

編集

https://docs.unity3d.com/ja/current/ScriptReference/UI.InputField.html
ここを参考にInputFieldの制御を書く

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class InputFieldController : MonoBehaviour
{
    public string inputValue;
    InputField inputField;

    void Start()
    {
        inputField = GetComponent<InputField>();
        InitInputField();
    }

    public void InputLogger()
    {
        inputValue = inputField.textComponent.text;
        Debug.Log(inputValue);
        InitInputField();
    }

    void InitInputField()
    {
        inputField.text = "";
        inputField.ActivateInputField();
    }
}

 

スクリプトとオブジェクトのリンク

ドラッグ&ドロップでInputFieldオブジェクトにスクリプトをアタッチ

InputFieldコンポーネント内、On End Editの ” + “をクリック
すぐ下にあるアタッチしたスクリプトをドラッグ&ドロップしてリンク

On End EditはInputFieldからフォーカスが外れた時実行
On Value Changedは入力値が変更されると実行

右側のプルダウンを選択

InputFieldController > InputLogger

入力テスト

これで入力できるようになった
Playボタンを押してテスト
文字列を入力して、Enterを押すとログに文字列が表示される

WebSocket通信

今入力された文字列をWebSocketでサーバーに送信できるようにする

新規スクリプトを作成

Assets > Create > C# Script

InputField.csの入力された文字列が格納される変数は
以下のようにpublicにして他のスクリプトで使用できるようになっている

public string inputValue;

作りこんでいくにつれて文字列の入力方法が
InputFieldから音声入力に変わる予定なので
WebSocketなど中心となるプログラムは別で作って
オブジェクト指向で入力方法だけ変えられるように作る

 

新規作成したmain.csを編集

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using WebSocketSharp;
using WebSocketSharp.Net;

public class main : MonoBehaviour
{
    GameObject InputField;
    InputFieldController script;

    WebSocket ws;

    string new_inputvalue;
    string old_inputvalue;

    void Start()
    {
        InputField = GameObject.Find("InputField");
        script = InputField.GetComponent<InputFieldController>();
        Debug.Log("InputField Conected");

        ws = new WebSocket("ws://27.120.98.26:9001/");
        ws.OnOpen += (sender, e) =>
        {
            Debug.Log("WebSocket Open");
        };
        ws.OnMessage += (sender, e) =>
        {
            Debug.Log("WebSocket Receive Message Data: " + e.Data);
        };
        ws.OnError += (sender, e) =>
        {
            Debug.Log("WebSocket Error Message: " + e.Message);
        };
        ws.OnClose += (sender, e) =>
        {
            Debug.Log("WebSocket Close");
        };
        ws.Connect();
    }

    void Update()
    {
        new_inputvalue = script.inputValue;

        if (new_inputvalue == old_inputvalue)
        {
        }
        else
        {
            string send_message = new_inputvalue;
            old_inputvalue = new_inputvalue;
            Debug.Log("InputField Update");
            Debug.Log("WebSocket Send Message Data: " + send_message);
            ws.Send(send_message);
        }
    }

    void OnDestroy()
    {
        ws.Close();
        ws = null;
    }
}

スクリプトをHierarchyのCanvasでへドラッグ&ドロップでアタッチ

入力テスト②

動作するかだけ確認
Playボタンを押してテスト

回線が開いてないからエラーが出ているけど
送信しようとしているのでOK
完成!

サーバー側との通信

サーバーでPythonファイルを実行する

python3 /home/ユーザー名/python3_project/mei/version_1/arp.py

こんな感じのメッセージが出たら準備OK

INFO:websocket_server.websocket_server:Listening on port 9001 for clients..

Unity側Playボタンを押してプロジェクトを実行
コンソールに接続完了メッセージが出ると同時に
サーバー側でも接続完了メッセージ

以降文字列を入力してEnterを押すと送受信される

Code for Japan Summit 2018 参加してきました

” Code for Japan Summit 2018 ” 新潟で開催されました
スタッフ参加させていただいたので経験をまとめさせていただきます

Code for Japan

市民が主体となって自分たちの街の課題を技術で解決するコミュニティ作り
支援や、自治体への民間人材派遣などの事業に取り組む非営利団体
( HPより引用 )

Brigade( Code for X )といって
各地のコミュニティが連携プログラムに参加している

年に1度、市民、自治体職員、エンジニア、デザイナー等
シビックテックに関わる人たちのセッションや、
海外の事例を共有する場をCode for Japan Summitの形で開催

参加までの経緯

新潟駅南口近くで開催されている” IOTLT Niigata “という勉強会で
Code for Niigata のそのときの副代表の方が
Summitの紹介をされていて興味を持ちました

Code for Japan Summitは日本海側・もちろん新潟では初開催とのこと
せっかくなのでスタッフで参加。( 撮影班 )

本当に色々な方が集まっていました

オープニングセレモニーからスタート

基調講演
1日目は海外ゲストのデザイナーAriel Kennanさん
2日目は同じくデザイナーの太刀川英輔さんの講演

ぼくは英語ちょっと聞き取れるかなくらいで
普通だったら全くわからなかった講演のはずでしたが

Code for Nerimaさんが設置していた
UDトークという同時翻訳ソフトのおかげでスクリーンに
リアルタイムで日本語が表示されるので楽しめました

太刀川さんの講演は、デザイナーさんてこんな感じなんだなと
知ることができるお話でした
私は「融合」をカレーうどんに例えるところが好き

扇風機を分解したりデザイナーさんて
いろいろなところからアイディアを得ていることを知りました

UDトークのそばでリアルタイムで書かれていく
グラレコ(グラフィックレコーディング)もすごかったです
手にペンをたくさん持って模造紙にまとめてた

学校で昨日真似しようとやってみたけど速度がたらなかったですw
練習してみたい!

スポンサートークではIBMさんのコードエディタを使ってプレゼン
というのがすごく印象に残っています

午後からは各部屋に分かれてセッションが行われました

86歳のiOSアプリ開発者さんのセッション
グラレコ講習会、田園風景などいろいろな地域の、いろんなテーマのお話

聞く側もかえって新潟の方の方が少ないくらい
いろんな職業、いろんな地域の方が参加しておられて
「巨災対」と書いてあるTシャツの人もいた^ ^

ブース展示もさせていただきました

ものづくり学縁つばめのブースでwacodeとして

ブース展示もさせていただきました

GR-LYCHEEデザインコンテストに出品する予定の

別の方たちが作っている車両系ロボットの
誘導プログラムの実験品を展示しました

特定のQRコードでの方向指示や
カラーセンサーでの床面認識などができます

ちょこちょこ見ていってくださる方もいました
説明もっと上手くなりたい

懇親会でのライトニングトーク

懇親会では、3分のLTをさせていただきました
ブログのページを紹介しつつ
自己紹介と、今やっているUnityのやつの紹介をしました

プロのみなさんの前で話すのは
すごく緊張しましたが、ひととおり話せました
声もう少し大きいと良かった

場数を踏んでいきたいと思いました

たくさんの方とお話しできました

IBMのスタッフさんアメリカ留学時の貴重なお話を
聞かせていただきました
もう少し英語頑張ろうと割と本気で思いました( ・∇・)
ブースで紹介されていた
Call for Code というイベントは18歳以上でない出せないので
その時が来たら参加しようと思います

Code for AICHIさん、たくさん話しかけていただいて
ありがとうございました
コミニュティの一体感がすごかったです

86歳のiOS App Developerの方
学生とでも気さくに話してくれる方で
自分も高年齢になっても面白いことやろうと思えました
また機会があったらじっくりお話ししたいです

@civicさん
今週の土曜日、NDS長岡IT開発者勉強会で
登壇しないかと声をかけていただきました
参加します!

そのほか新潟市企業立地課の皆さん、スタッフの皆さん
FB,Twitterつながりの皆さんなど
色々お世話になりました、ありがとうございます

まとめ

参加できて本当に良かったです
この時期にこんなすごいイベントに新潟で
参加できたこと、本当にラッキーだったと思います

ありがとうございました

WebSocket Unityとサーバーの双方向通信 Unity編

WebSocketを使ったUnityとサーバーの双方向通信の実装

WebSocketを使ってUnityとサーバー間で
テキストデータを送り合うことを第一目標にしています

今回は其の弐
Unity側の処理を書きます

前回はこちらです

WebSocket Unityとサーバーの双方向通信 サーバー編

用語整理

Unity
統合開発環境を内蔵したゲームエンジン
2Dはもちろん、3DやVR用アプリケーションも作ることができる
Web,iOS,Androidなど様々な機器向けにデータをエクスポートできる

WebSocket
HTML5に定義されている技術規格
クライアントとサーバー間に「ソケット」と呼ばれる
持続的な接続を確立させることで
双方向からデータの送信を開始できるようになる(らしい)
基本的なHTTPだとクライアントからだけしか
データの送信を開始できない

( Unity ) websocket-sharpライブラリ
Unityで使用するC#用ライブラリ
WebSocketが簡単に作れるようになっている
ここからダウンロードできる

Visual Studio
MicrosoftのIDE
Unityをダウンロードすると一緒についてくる
Unity2018からのUnityで使うメインエディタ

クライアント( Unity )側実装

websocket-sharpライブラリダウンロード

以下Gitにアクセスして”Download ZIP”
https://github.com/sta/websocket-sharp

websocket-sharpライブラリビルド

ダウンロードしたディレクトリを解凍
websocket-sharp.slnファイルをダブルクリック

Visual Studioで開く

サブプロジェクトExampleをソリューションから削除

ビルド方法をReleaseに変更

メニューからビルドを実行

Build>Build All

成功するとwebsocket-sharp/bin/Release/websocket-sharp.dllが生成される

Unityにwebsocket-sharpライブラリをインポート

テスト用Unityプロジェクトを作成( 2D )

Assetsに子ディレクトリPluginsを作成
Assets/Plugins内にビルドしたwebsocket-sharp.dllをコピー

websocket-sharpライブラリインポート終了

 

スクリプト作成

新規スクリプトを作成

Assets > Create > C# Script

色々調べながら、スペースキーを押すとメッセージが
サーバーへ送信されるスクリプトを書く。できたのはこんな感じ

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using WebSocketSharp;
using WebSocketSharp.Net;

public class main : MonoBehaviour
{

    WebSocket ws;

    void Start()
    {
        ws = new WebSocket("ws://27.120.98.26:9001/");

        ws.OnOpen += (sender, e) =>
        {
            Debug.Log("WebSocket Open");
        };

        ws.OnMessage += (sender, e) =>
        {
            Debug.Log("WebSocket Receive Message Data: " + e.Data);
        };

        ws.OnError += (sender, e) =>
        {
            Debug.Log("WebSocket Error Message: " + e.Message);
        };

        ws.OnClose += (sender, e) =>
        {
            Debug.Log("WebSocket Close");
        };

        ws.Connect();

    }

    void Update()
    {

        if (Input.GetKeyUp(KeyCode.Space))
        {
            string send_message = "SpaceKey_pressed";
            Debug.Log("WebSocket Send Message Data: " + send_message);
            ws.Send(send_message);
        }

    }

    void OnDestroy()
    {
        ws.Close();
        ws = null;
    }
}

main.cs(スクリプト)ができたら、SceneのMain Cameraへ
ドラッグ&ドロップでアタッチする

Unity側実装終了

 

接続テスト

サーバーでPythonファイルを実行する

python3 /home/ユーザー名/python3_project/mei/version_1/arp.py

こんな感じのメッセージが出たら準備OK

INFO:websocket_server.websocket_server:Listening on port 9001 for clients..

Unity側Playボタンを押してプロジェクトを実行
コンソールに接続完了メッセージが出ると同時に
サーバー側でも接続完了メッセージ

以降スペースキーを押すごとにメッセージが送受信される

 

まとめ

やっとサーバーっぽいことができた!
WebSocket色々使えるので、これから作る

WebSocket Unityとサーバーの双方向通信 サーバー編

WebSocketを使ったUnityとサーバーの双方向通信の実装

前回に引き続きサーバー立てた理由にもなる企画です
後々使うことになるので試します

WebSocketを使ってUnityとサーバー間で
テキストデータを送り合うことを第一目標にしています

其の壱ではサーバー側の処理を作ります

用語整理

Unity
統合開発環境を内蔵したゲームエンジン
2Dはもちろん、3DやVR用アプリケーションも作ることができる
Web,iOS,Androidなど様々な機器向けにデータをエクスポートできる

使用されているサーバー

サーバーをたてる!(契約編)

こちらの記事でたてたUbuntu Server
このブログのファイルも置かれている

HTTP ( Hypertext Transfer Protocol )
ハイパーテキスト・トランスファー・プロトコル
リクエスト-レスポンス型のプロトコルで
ハイパーテキスト、画像、音声 などを
サーバーからクライアントへ転送できる
クライアントがサーバにリクエストを送信、レスポンスを返す
基本、この時点で初期状態に戻るので
サーバはクライアントの状態を保存しない

WebSocket
HTML5に定義されている技術規格
クライアントとサーバー間に「ソケット」と呼ばれる
持続的な接続を確立させることで
双方向からデータの送信を開始できるようになる(らしい)
基本的なHTTPだとクライアントからだけしか
データの送信を開始できない

サーバー側実装

サーバー側でのWebSocket通信の準備をします
ネット上の情報ではnode.jsを使っているものが
多いようなのですが、後でAI系のものを
組み合わせるのでPythonを使って実装します

お約束

ubuntu 14.04 のアップデートを確認

root@localhost:~# sudo apt-get update

アップデートを適用

root@localhost:~# sudo apt-get upgrade

使わなくなったパッケージを削除

root@localhost:~# sudo apt-get -y dist-upgrade

autoremove

root@localhost:~# sudo apt-get -y autoremove

aptのキャッシュを削除

root@localhost:~# sudo apt-get -y autoclean

 

Python3 環境確認

python3バーション確認

~# python3 -V
Python 3.4.3

pip3のバーションを確認

~# pip3 --version
pip 1.5.4 from /usr/lib/python3/dist-packages (python 3.4)

 

ファイル作成

新規ディレクトリ作成

 ~# mkdir /home/ユーザー名/python3_project/mei/version_1/

Pythonファイル作成
arp.py ( automatic response program )

~# vim /home/ユーザー名/python3_project/mei/version_1/arp.py

Pythonファイル編集

websocket-serverのGitページに載ってるサンプル
他のPythonでWebSocketやってた人のコードを参考に

さっきのwebsocket_serverパッケージと
ログを取るlogginを入れてます

ポート番号はGitのサンプルのまんまにしてあります

import logging
from websocket_server import WebsocketServer

PORT=9001
HOST='27.120.98.26'

#logger_setup
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
handler = logging.StreamHandler()
handler.setFormatter(logging.Formatter(' %(module)s -  %(asctime)s - %(levelname)s - %(message)s'))
logger.addHandler(handler)
 
#callback
def new_client(client, server):
    logger.info('New client {}:{} has joined.'.format(client['address'][0], client['address'][1]))
 
def client_left(client, server):
    logger.info('Client {}:{} has left.'.format(client['address'][0], client['address'][1]))
 
def message_received(client, server, message):
    logger.info('Message "{}" has been received from {}:{}'.format(message, client['address'][0], client['address'][1]))
    reply_message = 'Re: ' + message
    server.send_message(client, reply_message)
    logger.info('Message "{}" has been sent to {}:{}'.format(reply_message, client['address'][0], client['address'][1]))
 
#main
if __name__ == "__main__":
    server = WebsocketServer(port=PORT, host=HOST, loglevel=logging.INFO)
    server.set_fn_new_client(new_client)
    server.set_fn_client_left(client_left)
    server.set_fn_message_received(message_received)
    server.run_forever()

たぶんこれで動くはず…

 

其の弐はこちら
https://www.washio.net/wacode/websocket-unity-server-com-2/

Unity Live2Dモデルのインポート

UnityにLive2Dのモデルをインポートします

サーバー立てた理由にもなる企画です
概要はある程度出来上がるまで伏せます

用語紹介

Unity
統合開発環境を内蔵したゲームエンジン
2Dはもちろん、3DやVR用アプリケーションも作ることができる
Web,iOS,Androidなど様々な機器向けにデータをエクスポートできる

UnityPackage
Unity上で利用できるいくつかの機能を
ひとつのファイルにまとめたパッケージ

Live2D
2D画像を変形、またその一部を補完することで
アニメーションモデルを作るソフトウェア
最近はVTuberブームで、関連する技術のサンプルが豊富

Live2D Cubism 3
Live2Dモデルを作ることのできる開発環境
PhotoShopファイルをもとにしてモデルを作成でき
動画として出力したり(VTuberみたいなイメージ)
Unity等で使用できるファイル形式でエクスポートしたりできる

Cubism 3.0 SDK for Unity
Unity環境下でLive2Dモデルを動作させるためのSDK
UnityPackageとしてUnityに取り込むことで使用できる

サンプルモデルダウンロード

http://www.live2d.com/ja/download
上記リンク先より、Live2D用のサンプルモデルをダウンロードしてきます
今回は桃瀬ひよりFREE版を使いました

モデルを組み込み用ファイルとして書き出し

Live2D Cubism 3起動

ファイル>ファイルを開く>ダウンロードしたモデル.cmo3

このような形でモデルファイル(編集用)が開きます
次に、このファイルをUnityに取り込める形式でエクスポートします

任意の場所にテキトウな名前のディレクトリを作成しておきます

ファイル>組み込み用ファイル書き出し>moc3ファイル書き出し

先ほど作成したディレクトリ内に書き出します
私の場合はこのように出力されました

次に、モデルを動かすためのアニメーションファイルを書き出します

ファイル>ファイルを開く>ダウンロードしたモデル.can3

このようなアニメーション編集用ビューになったはず
もしまだモデル編集用ビューだったら
ウィンドウ左上のModelerというボタンを押してAnimatorに変えてください

書き出します
先ほどモデルファイルを書き出したディレクトリを指定するようにします

ファイル>組み込み用ファイル書き出し>モーションファイル書き出し

モーションファイルが追加されました
これでLive2DのUnity用ファイルの書き出しは終了です

Cubism 3.0 SDK for Unityダウンロード

https://live2d.github.io/#unity
上記リンクより最新版を任意の場所にダウンロードします

UnityにCubism 3.0 SDK for Unityをインポート

公式のマニュアルはここ

Unityを起動
8GBのメモリだとほぼフルに使うようです
任意のプロジェクトを作成します
Templateオプションに2Dを指定してください

初期画面が開きました

Cubism 3.0 SDK for Unityをインポートします
画面下部にあるAssetという項目の中で右クリックし

Import Package>Custom Package...

先ほどダウンロードしたCubism 3.0 SDK for Unityの
unitypackageを指定して読み込みます

念の為ここで一度ビルドしてみます

File>Build & Run

エラーが出なければたぶんここまで順調です

UnityにLive2Dの組み込み用ファイルをインポート

先ほどLive2D Cubism 3で書き出した
Live2Dの組み込み用ファイル群をUnityにインポートします

出力されたモデル・アニメーションデータが入っている
ディレクトリをドラッグ&ドロップで
Unityのウィンドウ下部のAssetというところに入れます

入れたディレクトリの中に、青い箱アイコンの
ファイルが自動で生成されているはずです

この青い箱ファイル(Prefab)をUnityの真ん中のSceneエリアに
ドラッグ&ドロップで入れます

表示されました
サイズが小さすぎたりした時は赤枠のところのパラメータで調整します

ビルドしてみます

File>Build & Run

成功しました
以上でUnityへのLive2Dモデルのインポートは終了です

アニメーションモデルをドラッグ&ドロップすると
このような形で動かすこともできます!