ChatGPTとCopilotにちょっとマイナーな芸能ニュースの考察をしてもらった

ChatGPTのo3と4o、Copilotに

「糸奇はな の 環-cycle- がZABADAKファンにとって何故衝撃的だったか、norenwake前の吉良と上野の関係性やkatamiwakeでの出来事を交えて説明してください。」

と聞いてその回答について評論します。

 

概要の解説と評論のポイント

ZABADAKは1985年に吉良知彦上野洋子松田克志の3人で結成したバンド。
1987年に松田が脱退。
1993年に上野が脱退。この脱退時のラストライブはnorenwakeと呼ばれている。
1987年頃から多数の作品で作詞やライブサポートで参加していた小峰公子が2011年に加入。
2016年に吉良が逝去。このときのお別れの会がkatamiwakeと呼ばれている。
katamiwake以降zabadakは小峰のソロユニットとして活動を継続している。

・norenwake(上野の脱退)前には吉良と上野の間では音楽性を巡り衝突を繰り返していたと言われている。
禍根は長く残り、norenwake後、吉良・小峰と上野が同じステージに立つことは無かった。

・katamiwakeでは小峰が上野をステージに上げ、大勢の観客の前で抱き合うというシーンがあり、これを以てzabadakと上野の長年にわたる確執からの和解を果たしたと認識されている。

 環-cycle- は2017年に糸奇はなの楽曲として発表。(ZABADAKの曲ではない)

作詩:小峰公子
作曲:吉良知彦
編曲:上野洋子吉良知彦
とクレジットされている。
これは
・吉良の死後に吉良作曲の新曲が発表された
・吉良・小峰と上野が長年の諍いを乗り越え、共同で作品を発表した
という点で衝撃的であった。

採点のポイント
主題である
環-cycle-で吉良の逝去でもはや実現することは無いと絶望視されていた吉良・上野・小峰の共同制作、norenwake前のzabadakの再来が実現した。
という点を正しく記述していること。
その前提として
norenwake前の吉良と上野の関係性は険悪と言っても良いほどのものであり、katamiwakeで和解を果たすまで20年以上続いていた。
という点を記述できていること。
当然のこととして内容に客観的な誤りが無いこと。
が主な評価ポイントである。

 

Microsoft copilot

『環-cycle-』の衝撃と背景分析

「糸奇はな」の『環-cycle-』がZABADAKファンにとって衝撃的だったのは、この作品が従来の物語枠組み―特に吉良と上野の関係性―を大胆に覆すと同時に、ファンが長年抱いてきた期待や解釈を根底から揺さぶる展開を見せたからです。いくつかのポイントに分けて説明しましょう。

 

1. Norenwake前の吉良と上野の関係性

  • 微妙な均衡と潜在的な対立 Norenwake以前、吉良と上野は表面上は落ち着いた共存関係にあるように見えました。しかし、その実、二人の間にはいつしかに秘められた緊張感や、互いの存在に対する依存と反発が存在していました。ファンはこの「穏やかだけれども潜在的に火種をはらむ」雰囲気に、静かなるドラマ性と深い人間模様を感じ取っていたのです。

  • 期待される発展とその裏返し 長い間の物語の中で、吉良と上野の関係は、ほのかな信頼関係と同時に、どこか運命的な対立の予兆をも孕んでいました。ファンの間では、「いつかこの均衡が崩れて大きな展開が訪れるのではないか」という期待と不安が入り混じったものであり、その背景がじわじわと物語全体に影響を与えていました。

 

2. Katamiwakeで起こった出来事

  • 劇的なターニングポイント Katamiwakeにおいて、吉良と上野の隠された感情や対立が、これまで抑え込まれていた面影を一挙にさらけ出す形で噴出しました。従来の穏やかで静かな緊張感とは異なり、二人の間に起こった出来事は、予期せぬ激しさと劇的な転換を伴っており、ファンが持っていた「次第に温まる関係」のイメージを根底から覆しました。

  • 隠された真実の暴露 Katamiwakeのエピソードでは、互いの真意やこれまで見えなかった裏の事情が次々と明かされ、吉良と上野の関係性が再解釈される結果となりました。これにより、ファンは「知っていたはずのキャラクター」が実は全く異なる一面を持っていたことに直面し、物語全体の世界観に対する信頼感が大きく揺らぐ事態となりました。

 

3. 『環-cycle-』という作品全体の構造とその衝撃性

  • 時間の循環と再解釈 『環-cycle-』というタイトルが示す通り、物語は単なる直線的な進行ではなく、循環的なテーマ―過去、現在、未来が交錯する新しい構造―を採用していました。この構造こそが、従来のファンが理解していた物語の枠組みを一変させ、まるで既知の世界が再構築される感覚を与えたのです。

  • キャラクターと物語への再挑戦 糸奇はなは、吉良と上野の関係性だけでなく、作品全体の語り口や構造においても、従来の固定観念を打破する挑戦を試みました。ファンが長年蓄積してきた物語への愛着や期待が、突然の構造転換によって解体されることで、「裏に潜む真実」と「表に現れる衝撃」が同時に襲い、深い感情的衝撃を与えたのです。

 

まとめ

以上のように、

  • Norenwake前の吉良と上野の静かで微妙な関係性

  • Katamiwakeでの激しい対立と隠された真実の暴露

  • そして作品全体に漂う、時間や物語の再解釈というテーマ

これらが重なり合い、『環-cycle-』はZABADAKファンにとって「知っていた世界が一変する」衝撃的な体験となりました。ファンたちは、長らく抱いていたキャラクターへの愛着や、物語に対する信念が、今回の展開によって無情にも翻弄され、予想もしなかった方向へと導かれたのです。

 

さらに掘り下げると…

この転換は、単なる物語の展開以上の意味を持っています。ファンは自身の中で「物語とは何か」「キャラクターの真意とは何か」という問いを再度問い直さざるを得なくなり、その結果、これまでのファンダムの在り方自体が大きく再考される契機となりました。例えば、過去のエピソードに潜む小さな伏線が、今回の展開で再評価され、また新たな議論や創作意欲が生まれるなど、ファンコミュニティ全体に波紋を広げたと言えるでしょう。

このような多層的な要素が絡み合うことで、『環-cycle-』は単なる新作としてではなく、ファンにとっての感情的・知的な転換点として記憶に刻まれるに至ったのです。

 

もし、さらにこのテーマの他の側面―たとえば、具体的なエピソードの詳細や今後の物語への影響、またファンの反応や議論の方向性など―について知りたければ、ぜひお話を深めていきましょう。

 

もはや評論するのも時間の無駄なくらい何も合っていない。

「1. Norenwake前の吉良と上野の関係性」に書かれていることは「良好な関係と反発が共存していた」という典型的なバーナム効果でしかなく、情報量は0と言ってもよい。

全く知らないことについて0からここまでのゴミを捏造することがあるということがわかったという点は有益だったかもしれない。

文句なしの0点。

 

ChatGPT 4o

ChatGPT - ZABADAK 音楽の継承

前書き

「糸奇はな」の『環 -cycle-』がZABADAKファンにとって衝撃的だった理由は、単にZABADAKの名を冠した作品の登場という以上に、「吉良知彦亡き後のZABADAK」に対する感情的な揺さぶりを伴ったものであり、吉良知彦上野洋子の関係性の記憶、および**「norenwake」や「katamiwake」に込められた文脈**を踏まえると、その衝撃の深度が明らかになります。

具体的なことが書かれておらずバーナム効果感が強い。

「関係性の記憶」とか「「norenwake」や「katamiwake」に込められた文脈」とかそれっぽいワードを並べているだけで情報量は無い。

1. 背景:ZABADAKとその変遷

この書き方で松田に触れないのは不正確ではあるが人間の書く記事でもたまに触れられないしこの話題には関わってないので大きな減点というほどではない。

「彼の死(2016年)まで活動していました。」で終わるのは小峰の存在や現在も活動中であることを踏まえると誤りとせざるを得ない。

2. norenwake と katamiwake:死後の継承と葛藤

norenwake(2017)

  • 吉良知彦の死後、ZABADAKの意思を継ごうとする動きの中で生まれたイベント。

  • 元々ZABADAKに関わっていた音楽家たち(吉良の長女・吉良ゆゆ、音楽仲間)が中心となり、ZABADAK楽曲の演奏や継承を志向したライブ。

  • ただし、この段階では上野洋子は不参加。彼女にとってZABADAKは“過去のもの”であり、吉良との別れや立ち位置に複雑な想いを抱えていた。

katamiwake(2021)

  • 吉良の死後5年を経て、上野洋子がついにZABADAKの音楽の舞台に戻ることを決断したイベント。

  • 「形見分け」の名の通り、彼女なりに“故人の作品”と向き合う決意を示した瞬間であり、観客にとっては涙を誘う一夜となった。

  • このステージにおいて、吉良ゆゆや糸奇はなとも共演。世代や文脈を超えたZABADAK音楽の継承が見え始めた瞬間でもあった。

完全に捏造レベルの文章。

「吉良ゆゆ」という謎の人物がどこから来たか大変興味深い。

3. 『環 -cycle-』の衝撃

  • このアルバムは、糸奇はなが中心となって制作されたZABADAKの公式アルバム扱い

  • 彼女はZABADAK吉良知彦への敬意を持ちつつも、全く新しい感性・アプローチでZABADAK楽曲(例:「相馬二遍返し」)やオマージュ作品を作り出した。

  • ZABADAK名義で、上野でも吉良でもない“若手アーティスト”が中心に立ったこと、それを上野洋子が公認・参加していることは、かつてのファンにとって強烈な意義を持つ。

前述の通り、環 -cycle-はZABADAKのメンバーによる楽曲提供であり、当然「ZABADAKの公式アルバム」ではない。

それ以外もだいたい妄想。

4. ZABADAKファンにとっての衝撃の正体

要素 衝撃の理由
糸奇はなという「新しい声」 吉良知彦のような音の構築、上野洋子のような表現力を持ちつつも、それとは異なる独自の世界観を展開。ファンの“ZABADAK観”を揺さぶった。
ZABADAK名義での新作 吉良の死によってZABADAKは“完結”したと考えていた層にとって、「続きがある」ことへの戸惑いと希望。
上野洋子の承認と共演 上野が再びZABADAKに関与するとは思われていなかったため、katamiwakeから続くこの流れは“時を超えた再会”のように受け止められた。
吉良ゆゆの存在 「血縁としてのZABADAK」を象徴する存在。糸奇はなとの世代的コントラストが、“遺されたものが紡ぐZABADAK”という新たな物語を作り出していた。

「吉良の死によってZABADAKは“完結”したと考えていた層にとって、「続きがある」ことへの戸惑いと希望。」という点はわかるけどこれだけ適当に並べとけば1つ2つくらいはかするよねってレベル。

上野洋子の承認と共演」についてはkatamiwakeがnorenwakeの誤りとすれば最重要な点について記述していると捉えられなくもないが前後誤りだらけの記述から考えると適当に言ってる感は拭えない。

結論

『環 -cycle-』は、単なるトリビュートでも、公式リメイクでもなく、ZABADAKの“魂の継承”そのものとして登場しました。

それは、「ZABADAKは吉良と上野のもの」という古い感覚を一度壊す必要があり、そこに生まれる違和感、痛み、驚き、そして再生こそが、ZABADAKファンにとっての衝撃だったのです。

前提が誤りだらけなので特に論じる必要も無い妄想ポエム。

総評

「上野が再びZABADAKに関与するとは思われていなかった」という最重要な点について触れてはいるので30点くらいつけてもいいかなとは思うがそれ以外のハルシネーションが酷すぎるので計0点。

吉良の逝去が深く関わってる感だけはある等、捏造の内容が Microsoft copilot に比べ具体的である分たちが悪いという見方もある。

 

ChatGPT o3

ChatGPT - ZABADAKの衝撃的再生

1. のれん分け前──吉良知彦×上野洋子という“核融合

ZABADAK は1985 年に吉良知彦上野洋子松田克志で結成され、民族音楽プログレを溶かした独特のサウンドで頭角を現しました。特に 吉良のギター/作曲センスと、上野の多重コーラス/アレンジ がせめぎ合いながら融和する化学反応は、バンド初期の代名詞でした。ところがツアーや制作の過密さ、音楽観の拡散を背景に1993 年9月の日比谷野音公演〈のれん分け〉を区切りに上野が脱退──8年間続いた“黄金コンビ”は解散します。

norenwak前のzabadakの無難な紹介にとどまる内容。

内容に誤りがあるわけではないが、環-cycle-が衝撃的であったことへ繋がる前提を十分に説明できていない。

2. 〈katami wake〉――吉良急逝後に訪れた“喪失の確認”

2016 年7月、吉良知彦が急逝。翌8月の追悼イベント〈katami wake〉では**マスターテープの切片や機材がファンに“形見分け”**され、出演者と来場者が合唱で別れを告げました。この場で上野洋子もステージに呼ばれ旧友と抱擁し、「遠い音楽」を歌う姿が深い感動を呼びます。ファンはここで“ZABADAK は終章に入った”という現実を受け止めたのです。

上野がステージに呼ばれたという点を正しく書いている点は評価できる。前提として不仲からの和解という点に触れられていないのは不十分。

3. 「環-cycle-」誕生の経緯

  • 作曲吉良知彦(生前に書き溜めた未発表曲)

  • 作詞小峰公子(長年 ZABADAK の詞を担ったパートナー)

  • 編曲吉良知彦 & 上野洋子――つまり“のれん分け”以来ほぼ四半世紀ぶりの公式タッグ

  • 歌唱:糸奇はな(新人シンガー)
    この曲は TV アニメ『魔法使いの嫁』ED として 2017 年10 月に世に出ました。

「“のれん分け”以来ほぼ四半世紀ぶりの公式タッグ」という最重要な点を適切に記述できている。

4. ZABADAK ファンが“衝撃”を受けた4つの理由

# 何が起きたか 何故ショックだったか
1 未発表の吉良曲が突然公式リリース 形見分けで一区切りついたはずの“残響”が、まだ続いていたと知る驚き。
2 上野洋子のクレジット復活 1993 年に分かれた2人が、吉良没後に再び“共作”の形で現れた事実が胸を突いた。
3 詞が「輪廻」「再生」を示唆 曲名にもある“環(めぐ)り”というテーマが、吉良の死後に届けられたメッセージのように響いた。
4 アニメ ED という意外な場 深夜アニメを通じて ZABADAK サウンドが新世代へ飛び火し、旧来ファンはテレビのテロップで吉良の名を再確認して二度驚く──SNS 上では「息が止まった」「涙が出た」という投稿が相次ぎました。

「未発表の吉良曲が突然公式リリース」「上野洋子のクレジット復活」という重要な点は適切に記述できている。

「詞が「輪廻」「再生」を示唆」は誤りではないが主観が強いのでノーコメント。

過去に吉良がアニメに楽曲を提供している事例はいくつかあり(十二国記 月迷風影、狼と香辛料 旅の途中 等)、「アニメ ED という意外な場」というのは違和感がある。

5. 楽曲に宿る“ZABADAK らしさ”と新しい血

  • リズム変拍子ながら流麗──80-90 年代 ZABADAK の代表曲「相馬二度返し」「遠い音楽」に通じる構造。

  • コーラスワーク:上野の多声コーラスが要所を飾り、吉良の12 弦ギターが空間を広げるアレンジ。

  • ボーカル:糸奇はなのハイトーンは、吉良が好んだ“少年少女のあわい”の声質を現代的にアップデートし、楽曲を“現在形”へ引き寄せた。

残念だがこれについてはハルシネーションを起こしていると言わざるを得ない。

ZABADAKにありがちな特徴を適当に並べた感が強い。

変拍子や特殊な多声コーラスは採用されていない。

「“少年少女のあわい”の声質を現代的にアップデートし、楽曲を“現在形”へ引き寄せた。」はもはやポエム。

6. まとめないかわりに――“環”が示したもの

「環-cycle-」は、

〈のれん分け〉で分岐した2つの円
〈katami wake〉で途切れた円を、
もう一度結び直してくれた曲
と言えます。ZABADAK の物語は終わったわけではなく、形を変えながら“巡って”いく──その事実を思いがけず目撃した衝撃こそ、ファンの胸に焼き付いたのでしょう。

ポエムとしては悪くないと思うけどポエム書いてくれとは言ってないんだよなぁ。

総評

「環-cycle- が何故衝撃的だったか」についてはハルシネーションのない説明がされていた。

不仲からの和解という点について触れることを期待し「norenwake前の吉良と上野の関係性やkatamiwakeでの出来事を交えて」と条件をつけたがこの点は十分に反映できていなかった。

おおむね問題無い回答が出来ているだけに楽曲の説明についてのハルシネーションが発生しているのは残念であった。

質問に対する回答としては85点、ハルシネーションの発生で-10点。計75点。

 

Visual studio 2019/Visual studio codeでタイトルバーとメニューバーがくっついてるのを分離する。

ウインドウ移動するときどこつかんだらいいかよくわからない。

Visual studio 2019

ツール>オプション>環境>プレビュー機能

「コンパクトメニューと検索バーを使用」のチェックを外してVSを再起動。

f:id:Hotspring:20190509171151p:plain

f:id:Hotspring:20190509171448p:plain

Visual studio code

「Ctrl + ,」 で設定タブを表示

検索窓に「window.titleBarStyle」を入力

「native」に変更して再起動

before

f:id:Hotspring:20190509171904p:plain

after

f:id:Hotspring:20190509171725p:plain

 

Raspberry pi+zabbix + BME280 で温度湿度気圧のロギングをする

Raspberry piに温湿度気圧センサーを接続しzabbixから定期的に値を取得しロギングします。

Raspberry piにRaspbianとzabbix agentを入れ監視が出来ている状態を前提とします。

 

1.センサーを接続する

akizukidenshi.com今回は秋月で売っているセンサーを使用しました。

I2CとSPIに対応してますが扱いが簡単なI2Cで接続します。

ブレッドボード等を使用しCSBをVDD、SDOをGNDに接続しI2CモードにしてVDD,GND,SDI,SCKをRasbperry piに接続します。

 

f:id:Hotspring:20180613170556p:plain

 2.I2C使用の準備

I2C使用の準備をします。

$ sudo su

# apt-get install i2c-tools python-smbus

で必要なソフトウエア、ライブラリをインストールします。i2c-toolsはコンソールからI2Cを操作するためのツール、python-smbusはpythonからI2Cを使用するためのライブラリです。

次に、Raspberry piはデフォルトでI2Cが無効になっているため有効にします。

# raspi-config 

 で設定ツールを起動し

5.Interfacing options

f:id:Hotspring:20180612155146p:plain

P5 I2C

f:id:Hotspring:20180612155236p:plain

の順で選びI2Cを有効にします。

f:id:Hotspring:20180612155300p:plain

 

I2C使用の準備が整ったか確認します。

# i2cdetect -y 1

で接続されたI2CデバイスのIDを確認出来ます。

f:id:Hotspring:20180612155547p:plain

ここではIDが0x76のデバイスが接続された状態になっています。

表示されなければ接続や設定を確認してください。

3.値取得

SwitchScienceの公開してるサンプルのpythonスクリプトを値の取得と表示を分離するよう修正したものを用意しました。

そのまま実行すれば温度湿度気圧が表示されます。

https://github.com/Hotspring-r/BME280/blob/master/Python27/bme280_sample.py

# wget https://raw.githubusercontent.com/Hotspring-r/BME280/master/Python27/bme280_sample.py
<略>

2018-06-12 07:46:53 (3.09 MB/s) - `bme280_sample.py' へ保存完了 [3999/3999]

# python bme280_sample.py
temp : 26.78 C
hum : 49.65 %
pressure : 994.03 hPa

上のスクリプトを/etc/zabbixに置き、json形式で出力するスクリプトを barometer.py という名前で同じ場所に作成します。

# barometer.py 

import bme280_sample
bar = bme280_sample.readData()
print str(bar).replace("'","\"") 

 実行するとjson形式で温度湿度気圧が出力されます。

# python barometer.py
{"hum": 51.28607150999257, "pres": 1008.3877801085655, "temp": 27.001369402982526}

4.zabbixの設定

/etc/zabbix/zabbix_agentd.conf に以下の行を足してzabbixからスクリプトを呼べるようにします。

UserParameter=Barometer,python /etc/zabbix/barometer.py

デフォルトでzabbixユーザーにはi2cへのアクセス権限がないのでadduserで権限を付与し、再起動します。

 

# adduser zabbix i2c
ユーザ `zabbix' をグループ `i2c' に追加しています...
ユーザ zabbix をグループ i2c に追加
完了。
# reboot

 

http://static.bmscr.com/blog/barometer_template.xml からテンプレートをダウンロードしzabbixの管理コンソールからインポートしてRaspberry piのホストにテンプレートを設定します。

Barometerという名前のアイテムでjsonを1分ごとに取得し依存アイテムで温度湿度気圧それぞれの値を取り出してます。

f:id:Hotspring:20180614184040p:plain

グラフで値の変化を見ることも出来ます。

f:id:Hotspring:20180614184051p:plain

 

VSSからMercurialに変換する

弊社開発環境からMicrosoft製ソース破壊管理ツールVisual Source ShredderSafeを駆逐しMercurialに移行しました。

VSSから別のVCSへ移行するツールは大量にあるのですが日本語がまともに扱えなかったりそもそも動かなかったりして最終的に成功したのはhanaguro8/vss2gitだけでした。

私は検証していませんがツール自体はgit,Bazaarにも対応していますしソースがわかりやすいので他のVCSに対応させるのもさほど難しくは無いと思います。

基本的な使い方は

を見ていただければわかると思いますがいくつかの躓いた点を解説します。

  1. Mercurial周りにバグがあります。
    修正してPullRequestを送ってありますが2年以上更新の無いプロジェクトなのでいつ反映されるかわかりません。反映されるまでHotspring-r/vss2gitを使用してください。PR反映されました
  2. rubyが64bitだと死ぬ。
    ちゃんと解説ページにも添付ドキュメントにも書いてあるのですが見落としてしばらく悩みました。内部でCOMを呼び出すので32bit版rubyを使わないと死にます。
  3. Mercurialの言語設定が日本語だと死ぬ
    内部でMercurialの吐き出すメッセージを解析しているので英語以外の言語にしていると死にます。実行前に
    set LANGUAGE=en-us
    のように環境変数を設定すればMercurialの言語を一時的に変更できます。内部で環境変数を設定するよう修正されました
  4. 日本語のファイル名を使ってると死ぬ
    Mercurial側の問題ですが win32mbcs エクステンションを有効にしないと死にます。
    内部でMercurialリポジトリを作成してすぐにコミットされるのでリポジトリ個別設定で有効にしている時間はありません。日本語環境から頻繁に使うのでグローバルで有効にしてしまった方が良いです。

 

Windows 10 IoT Insider Previewの新しいバージョンが出ました

6/24にこっそり新しいバージョンのWindows 10 IoTがリリースされました。

ms-iot.github.io

主な更新点は

  • 専用のFFU書き込みツールが付属するようになった
  • Secure Shell (SSH) サーバーをサポート
  • Raspberry Pi 2 で音声出力をサポート(USBオーディオオンボードアナログ出力)
  • 内蔵Webサーバーのポートが80から8080に変更

 です。

FFU書き込みツールが付属するようになったため dism.exe を入手する必要がなくなり、ディスク番号を間違えて違うディスクのデータを飛ばしてしまうこともなくなりました。また、シンプルなインターフェイスで使いやすくなっています。

公開されているファイルの形式がmsiが1つだけ入ったisoイメージになりました。

インストールするとWindowsIoTImageHelperという名前のFFU書き込みツールがインストールされます。

f:id:Hotspring:20150703163150p:plain

FFUファイルは C:\Program Files (x86)\Microsoft IoT\FFU\RaspberryPi2 におかれています。

SDカードを選択し、ffuを選択すれば書き込みができます。

Raspberry PI + Windows 10 IoT + C#でI2Cでキャラクタディスプレイに接続する

今回は秋月の有機ELキャラクタディスプレイモジュールを接続します。

出力機器なのでデバイス側からデータを受け取る必要は無く一方的に送るだけなのでセンサーよりも簡単かもしれません。

必要な物
 回路接続

今回は秋月で売ってるブレッドボード用変換基板を使いました。接続がしやすくなるだけなのでなくても全く問題ありません。

今回使用するキャラクタディスプレイは4番ピンの接続でアドレスを切り替えることができます。今回はLowにしてアドレス0x3Cを使用します。f:id:Hotspring:20150527172542p:plain

センサーとディスプレイの2つのデバイスを接続しますが並列に接続するだけで問題ありません。

ディスプレイの3番ピンをGNDに接続する必要があったりI2CのInとOutが別のピンになってて両方に接続する必要がありますがデータシート通り接続すれば問題ありません。

プログラム

センサーは前回と同様に初期化します。

ディスプレイはコマンドを送るときは最初に0x00を送ります。

画面クリアは0x01、カーソル位置を初期化するのは0x02、画面表示の設定は0x0Cなので順に送信します。

_display = await InitI2cDevice(0x3C);
// 画面クリア
_display.Write(new byte[] { 0x00, 0x01 });
// カーソルを左上へ
_display.Write(new byte[] { 0x00, 0x02 });
// 表示設定
_display.Write(new byte[] { 0x00, 0x0C });

カーソル位置を1行目先頭にするには0x80、2行目先頭にするには0xA0を送ります。

文字を表示するには0x40に続けてコードを送信します。英数字はASCIIコードと同じコード体系になっているのでChar型をByteにキャストしてそのまま送信できます。

今回は若干トリッキーではありますがLINQを使ってキャストしてToArrayでByte配列にしています。

_display.Write(new byte[] { 0x00, 0x80 });
_display.Write(new byte[] { 0x40 }.Concat(v2.Select(_ => (byte)_)).ToArray());

  前回のプログラムで取得した温度湿度をstring.Formatで文字列に変換して表示しています。

特に変わったことはしていないので解説は省略します。ソースコードを見てください。f:id:Hotspring:20150526102959j:plain

今回のプログラムI2cDisplay.zip

 

Raspberry PI + Windows 10 IoT + C#でI2Cで温湿度センサーに接続する

今回は秋月の HDC1000使用 温湿度センサーモジュール をI2Cで接続して温度と湿度を計測します。

I2C is 何

I2CとはInter-Integrated Circuitの略で近距離通信用の低速なバスです。名前の通りIC間の通信等電子機器内部の使用を想定しています。

※通信速度は10kbps~3.4Mbpsの複数のモードがありますが、Windows 10 IoTの標準ライブラリでは現状100kbps,400kbpsの2つしか対応していません。

2は上付き文字が正式な名称ですが普通の数字が使われることもあります。読み方はアイ スクエアド シーが正式な読みですがアイ ツー シーと呼ばれることも多いです。WikipediaにはIICと略されることもあると書かれていますが私は見たことがありません。

データ線が2本で外付け回路が2本のプルアップ抵抗だけで済む等回路が簡単であること、1つのバスに複数の機器を接続できること、ホットスワップに対応、特許が2004年に失効していてロイヤリティフリーで使用できること等から広く使われており対応したデバイスも簡単に入手できます。

PC内部デバイス管理に使われるSMBusやPCとモニターの間で解像度等の情報を交換するDDC、変わったところではWiiのコントローラーとヌンチャク等の周辺機器との通信等にも使われています。

I2Cはマスターとスレーブの構成で通信は全てマスターが管理しスレーブから通信を開始することはできません。スレーブは全て7bit(16個の予約アドレスがあるため使用可能なのは112個、10bitの拡張規格もあるけどあまり使われていない)のユニークなIDを持っています。マスターを複数にすることもできますがマスター間、スレーブ間の通信はできません。

用意する物
回路作成

I2Cは2本の信号線にプルアップ抵抗が必要ですが、Raspberry PIはプルアップ抵抗が内蔵されているため接続するだけで使用できます。

秋月のHDC1000モジュールには+V,GND,SDA,SCL,RDYの5つの端子があります。

+V,GNDは電源、SDA,SCLはI2Cです。RDYは今回は未接続でかまいません。

図のように接続します。

 

f:id:Hotspring:20150520112007j:plain

プログラム

XAMLにTextBlockを置き温度を表示できるようにします。コードビハインド側に温度、湿度を格納するプロパティを置きINotifyPropertyChangedを実装してプロパティの変更を通知できるようにします。通常のWPFと同じなので解説は省略します。

<TextBlock FontSize="20" HorizontalAlignment="Center" VerticalAlignment="Center">
    温度:<Run Text="{Binding Temp}"/>°<LineBreak />
    湿度:<Run Text="{Binding Hum}"/>%
</TextBlock>

最初にI2Cを使用するためポートを初期化します。

I2Cを使用するにはWindows.Devices.I2c名前空間のクラスを使用します。

いろいろデバイス名を取得したり設定をします。I2cDevice.GetDeviceSelectorの引数はRaspberry PIなら"I2C1"固定です。デバイスによって変わるみたいです。初期化処理は基本的に変更する必要は無いはずです。変更するとしたらBusSpeedくらいだと思います。デバイスが対応していればFastModeが選べます。

using Windows.Devices.I2c;
 
private static async Task<I2cDevice> InitI2cDevice(byte address)
{
    var aqs = I2cDevice.GetDeviceSelector("I2C1");
    var device_information_collection = await Windows.Devices.Enumeration.DeviceInformation.FindAllAsync(aqs);
    var deviceId = device_information_collection[0].Id;
    var connectionSetting = new I2cConnectionSettings(address);
    connectionSetting.BusSpeed = I2cBusSpeed.StandardMode;
    connectionSetting.SharingMode = I2cSharingMode.Shared;
 
    return await I2cDevice.FromIdAsync(deviceId, connectionSetting);
}

マニュアル通り初期化コマンドを送信します。0x02 0x10 0x00を送信で温度湿度同時測定になります。

I2CのデバイスIDはマニュアルに記載されています。今回は0x40です。

byte address = 0x40;
I2cDevice device = await InitI2cDevice(address);
// デバイス初期化
// 測定モードを温度湿度同時にする。
device.Write(new byte[] { 0x02, 0x10, 0x00 });

0x00を送信すると測定を開始し、約13msで値の取得が可能になります。RDYピンの状態を監視すれば変換完了後すぐに取得できますが回路プログラム共に複雑になるので今回は余裕を持って100ms待ってから値を取得するようにします。

// 測定開始
device.Write(new byte[] { 0x00 });
// センサーの測定待ち。測定にに13[ms]かかるので余裕を持って100[ms]待つ。
await Task.Delay(100);
var buf = new byte[4];
device.Read(buf);
// 仕様書通りに変換
var temp = (buf[0] * 256.0 + buf[1]) / 65536 * 165.0 - 40.0;
var hum = (buf[0] * 256.0 + buf[1]) / 65536 * 100.0;

UIスレッド以外からPropertyChangedイベントを発行すると落ちるっぽいのでDispatcher.RunAsyncでUIスレッドに戻します。

await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => {
    this.Temp = temp;
    this.Hum = hum;
});

タイマーで定期的に実行するようにすれば温度湿度が表示できます。

f:id:Hotspring:20150520112955j:plain

今回のプログラム i2c.zip