Twitter4C v3.0を公開しました。

Twitter4C v3.0となる「Twitter4C with OpenSSL」を公開しました。今回のアップデートではその名の通りSSLライブラリをCyaSSLからOpenSSLに変更したため、別リポジトリでの公開としました。

元々、Twitter4Cは(現状メモリを多く使っていることを差し置いて)ネットワークをサポートした組み込みシステムやLinuxなどを想定し、SSLライブラリ(CyaSSL)もパッケージ化した状態でmakeすれば一応動く状態で配布していました。現状でも想定した環境(x86 Linux)では動作するものの、Linuxでは64bit環境でビルドが通らないといった問題がありました。
Twitter4Cがよく使用される環境としてはLinux系が多く、最初に想定していた組み込み用途よりも導入ケースが多く見られます。また、x64でビルドできないという報告は昨年の時点で海外のユーザから連絡を受けました。

Twitter投稿に関する関数群はx86でもx64でも動作します。しかしながらパッケージしたSSLライブラリによってこの動作が左右されてしまうため、まずはこの問題をクリアする必要がありました。このために最初の「オールインワン」な発想を捨て、出来る限りシンプルな状態でソースを提供し、ユーザ側でSSLライブラリを選択してもらう形式をとることにしました。

CyaSSLはOpenSSL互換の関数群も提供していたため、移植自体はどちらを使用するにしても比較的簡単に行うことができます。実際、session.cの差分を取ってもらうと分かりますが、send/recvがごっそり無くなっているだけで、あとは殆ど同じです。

OpenSSLライブラリは各種Linux環境において最適な形で提供されるため、通常使用の範囲ではこの状態でどの環境でも使用できます。また、組み込み向けに使用する場合はCyaSSLをインストールし、ヘッダを変更するだけで使用できるようになります。

最初のバージョンの公開から約2年が経過し、環境もニーズもだいぶ変化してきたように思います。
Twitter4C自体は数々のソースコードを外部からインポートしてそれをラップした状態での公開であり、つぎはぎだらけでまだまだ無駄が多い状態です。しかし、Twitterとの通信の仕組みを分かりやすく、使いやすい状態で公開していることを売りにしています。

以前から言っていてなかなか開発できずにいますが、よりメモリ使用量を削減して組み込み向けに特化したバージョンの開発も進めていこうと思っています。特にTwitterAPIへのアクセスにSSL接続が必須になるため、今後このようなライブラリがより求められるようになると考えています。

今後ともTwitter4Cをよろしくお願い致します。

LPCXpresso LPC1768(1769)でPWM出力

TNCTのえむけー(@mktakuya)に誘われて年越しハッカソンしてました。先週秋葉原に行った時にようやく自分用のマイコンを買ったので、とりあえずそれで遊んでみようということで、LチカからのPWM全ピン出力を試してみました。

参加表明してから思い出したのですが、そういえば10年位前の年末も「日本語プログラミング言語ひまわり(今のなでしこ)」に手を出していました。もちろん夜はまたいでないし、ましてプログラムの書き方すら分かっていなかったので、全然動かなかったのですが。笑

事の発端

30日。Twitter4Cをx64とかでも使えるように作業していた時に、ふとTLを見るとえむけーが年越しハッカソンの勧誘をやっていたので

https://twitter.com/mktakuya/statuses/417602546115436544

ちょうど作業も終わったので登録してみた、というのが始まり。

 ソースコード

今回買ったマイコンはNXPのLPCXpresso LPC1769で、mbedからブートローダとかUSBフラッシュを取っ払った素のマイコン、といえば分かる人がいるかもしれません。なんでこのマイコンかというと、私が昨年度卒研でいじっていたマイコンっていうのと、USBもEthernetもなんでも使えて2.5kでとってもお買い得だから。みんなも買うといいよ!(ステマ)

で、PWMも卒研の時にいじってはみたんだけどどーもうまく出力できなくて、今回はそのリベンジといった感じでやってました。調べてるとあんまり詳しくソースとか載せてる人があんまりいないので、誰かが書いた英語のPDFとNXP公式の日本語リファレンスをとっかえひっかえしながらコードを書いてました。

やぎにいちゃんはGithubにリポジトリ立てて頑張ってましたが、私はまだGitに慣れてないのと(ぉぃ)そこまでするほどのコードでもないのでここに載せちゃいます。

 

まずPWM_initでMR0の値(1MHzを分周した時のカウント値、40kHzなら1000000 / 40000 = 250)と使用するPWMピン番号(使用したいところに1を立てる)を指定して、あとはそれぞれのPWMピンに対してデューティを設定してあげればOKのようです(少なくともLEDの輝度を調整する程度には)。

よく見ると高専時代に参考にしていたサンプルコードとあまり違いがない気がしますが、あの時動かなかったのは動かなかったのではなく単に周期が細かすぎてLEDに出て来にくかっただけなのかも…とか思ったりしましたが、とりあえず手元の青色LEDはこの周期設定とプログラムで輝度が調整出来ました。

あと、Ethernet接続キットも買ったので試しにTwitter投稿を試みたのですが、uIPのドライバがmbedのLANチップ用(DP83848C)になっていてLPCXpressoにはそのままでは移植できなかったので、今回は断念しました。

さいごに&まとめ

  • ハッカソンでみんなが何かを頑張っていると自分も頑張らなければと思えた
  • しばらくマイコンもLPCXpressoも触っていなかったので感覚が戻るまで時間がかかった…
  • LPCXpressoを日本語化したせいで、.ldファイルの「.data」がなぜか勝手に日本語化されて最初ハマった
  • CMSISくらい最初っから入れておけよバカァ(入れ方わからなくて1時間くらいはまった)
  • みんなキーボード打つの早くて、聞こえてくる打鍵音が怖い><
  • 秋月のパーツ袋詰に入ってた抵抗だけではやっぱりちょっと足りないかもしれない
  • TwitterAPIへのアクセスがSSL接続に限定されるらしいので早めにTwitter4Cの対応も含めて手を打っていきたい

References   [ + ]

1. UsePWMResister & (1U << i
2. i * 2