Wifi接続してるのに、インターネットに繋がらない
まえがき
PCでWifi接続してるのに、インターネットに繋がらない。
でも、スマフォで同じルータにWifi接続してみるとネットに繋がる。
Wifi接続画面から接続先のLANを見ると、「インターネットなし、セキュリティー保護あり」になっている。
なぜ、PCからネットに繋がらないのか。
こんな状況下での一助になってくれればと思います。
ESC/POSとは何ぞや
前置き
現在、私が開発しているものがAndroid端末とThermal Printer(サーマルプリンタ)をBletoothで接続し、レシートを印刷するものである。
今回は、Thermal Printer(サーマルプリンタ)にどのようなデータを送ればレシートが印刷できるのかを、現段階で私が理解した範囲で書く。この記事を読む前に理解していて欲しいことは、この記事の内容は私が英語のマニュアルを機械翻訳するなどして、勘だったり勝手に察したりした内容が書かれていると理解していてほしい。一切の責任を負いません。
内容が事実と異なったり、分かりにくい箇所があれば一報をお願いいたします。
最終更新日(2017.2/20)
「ESC/POS」とは
私が調べた範囲だと以下のような事らしい
今回使用するThermal Printer
製品:Koolertron 58mm Mini Portable Bluetooth 4.0 Wireless Receipt Thermal Printer, Compatible With Apple And Android (Koolertron 58mm Mini Portable Bluetooth 4.0 Wireless Receipt Thermal Printer, Compatible With Apple And Android : Koolertron.com)
特徴1:ESC/POSの互換性あり
特徴2:スマホやタブレットとBluetooth接続し、印刷が可能
特徴3:デモアプリ同梱
「ESC/POS」で頻繁に使うコマンド
[ESC ! n]コマンド
内容:文字の大きさや太さ、アンダーラインなどの設定コマンド
フォーマット:
ASCII | ESC | ! | n |
---|---|---|---|
Hex(16進数) | 1B | 21 | n |
Decimal(10進数) | 27 | 33 | n |
nの値による設定:
例:fontB、強調、アンダーラインの文字を印刷する場合
fontB = (0000 0001), 強調 = (0000 1000) , アンダーライン = (1000 0000)
n = (0000 0001) + (0000 1000) + (1000 0000) = (1000 1001)
2進 = (1000 1001)
16進 = (89)
コマンド(16進数/Hex):「1B 21 89」
AndroidProject.java(bluetooth関連の部分は省略)
public class MainActivity extends AppCompatActivity implements Runnable, View.OnClickListener { //[ESC ! n] Select print mode (s) byte Character_font_A = 0x00; byte Character_font_B = 0x01; byte font_Emphasized = 0x08; byte font_Double_height = 0x10; byte font_Double_width = 0x20; byte font_Underline = (byte)0x80; private Button printButton; private OutputStream mOutput_Printer=null; // bluetooth出力ストリーム @Override public void onCreate(Bundle savedInstanceState){ printButton= (Button)findViewById(R.id.printButton); printButton.setOnClickListener(this); } @Override public void onClick(View v){ if(v.equals(printButton)) { // フォントの設定(font setting) // [ESC ! n] byte Character_font[] = {0x1B, 0x21, 0x00}; // DefaultとしてfontAを設定する Character_font[2] |= Character_font_B; // fontBを設定 Character_font[2] |= font_Emphasized; // 強調を設定 Character_font[2] |= font_Underline; // アンダーラインを設定(線幅を指定しないと印字されない) mOutput_Printer.write(Character_font); } } }
[ESC a n]コマンド
内容:印字する文字を左寄せ、中央寄せ、右寄せに設定する
フォーマット:
ASCII | ESC | a | n |
---|---|---|---|
Hex(16進数) | 1B | 61 | n |
Decimal(10進数) | 27 | 97 | n |
nの値による設定:
n | 寄せ側 |
---|---|
0,48 | 左寄せ |
1,49 | 中央寄せ |
2,50 | 右寄せ |
[ESC t n ]コマンド
内容:印字する文字コードの設定?
フォーマット:
n | 文字コード |
---|---|
0 | PC437 USA Standard Europe |
1 | katakana |
2 | PC850 Multilingua;l |
...etc
注意:
「katakana」ですが、ここで指定して使用できる文字はANK文字コードとなります.
ANK文字コードとは
・使える文字はアルファベット,数字,カタカナ(半角)のみです.
表→
ANK文字コード表
例:「アイウエオ」を印字してみる
AndroidProject.java(bluetooth関連の部分は省略)
public class MainActivity extends AppCompatActivity implements Runnable, View.OnClickListener { private Button printButton; private OutputStream mOutput_Printer=null; // bluetooth出力ストリーム @Override public void onCreate(Bundle savedInstanceState){ printButton= (Button)findViewById(R.id.printButton); printButton.setOnClickListener(this); } @Override public void onClick(View v){ if(v.equals(printButton)) { String aiueo="アイウエオ"; // フォントの設定(font setting) // [ESC ! n] フォント設定 byte Character_font[] = {0x1B, 0x21, 0x00}; // DefaultとしてfontAを設定 mOutput_Printer.write(Character_font); // [ESC a n] 文字配置位置 byte Textposition_Left[] = {0x1B, 0x61, 0x00}; mOutput_Printer.write(Textposition_Left); //印字位置を左寄せに設定 byte cmd[] = {0x1B, 0x74, 0x01}; // [ESC t 1]コマンド mOutput_Printer.write(cmd); //印字文字(言語?)を「katakana」ANK文字コードに設定 mOutput_Printer.write("------katakana------".getBytes()); byte aiueo[] = {(byte)0xB1, (byte)0xB2, (byte)0xB3,(byte)0xB4,(byte)0xB5}; //ANK文字コード mOutput_Printer.write("\n".getBytes()); mOutput_Printer.write(aiueo); mOutput_Printer.write("\n".getBytes()); } } }
ESC/POSで困ること
ESC/POSコマンドから日本語が印字できない事もないが,半角カタカナしか印字できない.
この問題への回避策として,レシートを文字として印刷するのではなく,画像として印刷する手法がある.
画像の印刷はESC/POSコマンドには無い(?)ようだ.しかし,プリンタの製造会社によっては画像を印刷するためのコマンドを用意しているかもしれない.また,対応する制御コマンドによっては画像の印刷も可能である(各自,自分が持っているプリンタのマニュアルを確認してみると良いかも).
画像の印刷が可能な制御コードとして,STAR (LINE)コマンドがあるらしい.私が使用しているサーマルプリンタはESC/POSコマンドだけでなく,STARコマンドによる操作も可能のようだが,上手く行かない.
bitmap画像を印刷することで日本語を印刷した例(参考サイト)として,以下に載せる.
blogs.yahoo.co.jp
参考サイト
How print invoice receipt using bluetooth thermal printer:http://stackoverflow.com/questions/30295927/how-print-invoice-receipt-using-bluetooth-thermal-printer
FAQ about ESC/POS:http://content.epson.de/fileadmin/content/files/RSD/downloads/escpos.pdf
Thermal Control Board User Manual:https://www.sparkfun.com/datasheets/Components/General/Driver%20board.pdf
Epson FX Printer Codes:http://stanislavs.org/helppc/epson_printer_codes.html
Review: Generic 5890 thermal receipt printer :http://reed-printer.blogspot.jp/2013/12/review-generic-5890-thermal-receipt.html
Cinema 4Dをはじめてみようかと思う.
※以下,ここからは何故Cinema 4Dを使うきっかけになったのか前フリになるので,飛ばしたい方は飛ばしちゃってください。
※また,内容は一部間違えた解釈,説明をしている可能性もあるので,詳しく知りたい人は自分で調べてみてください。間違っている部分など見つけましたら一報をいただければ幸いです。
背景
みなさんこんにちは。
最近,やりたいことをやらなきゃみたいな思いがあり,そんな時にCinema4Dを見つけた。
僕は音ゲーマー(?)であり,特にbeatmania IIDXが一番好きだ。音ゲーマーなら誰しもが「僕もこんな音楽作りたい!」って思うのは想像がつくと思います。しかし,DJに必要な機材はすごい高価で簡単には手に入らない。また,音楽知識が乏しい人にとってはさらにハードルが上がります。音楽知識が皆無な自分はどうやったら遊び以外で音ゲー関係に関われるか。そう,僕は軽くならグラフィック扱える。DJは無理でもVJっぽい事できるんじゃないかと考えた。
そんなこんなでVJをやれないか調べてみた。
VJとはビデオジョッキー?らしい。EDMなどのライブの映像を見たことがある人なら想像がつくと思うが,ライブの演出を担っている彼らである。僕が調べた感じ,映像を音楽に合わせてミックスして場を盛り上げるのがVJなのである。だが,既に出来上がっている動画繋げて再生するだけって面白みに欠けると思った。むしろ映像の素材こそ,自分で作りたい。特にCG系の映像を。
音楽知識も無い,絵も書けない,グラフィックをちょっとやれる僕がCinema 4Dを使ってVJの映像素材が作れないかこれからやっていきたいと思う(長続きするとは言ってない)。
Cinema 4Dとは何か
Cinema 4Dとはグラフィックツールらしい。グラフィックに詳しい人ならわかるかもしれないが,MAYAとか3ds MAXのような物だ。数あるグラフィックの中でCinema4Dを選んだ理由は,「新しい物への挑戦」,「扱いやすそう」,「テレビCMなどで使われているらしいから」である。また,VJになるにはどうしたら良いのか調べ物をしている時に見つけたサイトVJ映像素材の作り方 | VJ JAPANでオススメされていたので使うことにした。
Cinema 4Dを選ぶ
Cinema 4Dといっても色んなバージョンがあります。すでに分かりやすいまとめがあるので,そちらを参照してください→CINEMA4Dのバージョンを使い方で選ぶ。
このようにCinema4Dは最低でも10万円以上と高額です(もう少し安ければ...)。あるサイトでは激安でソフトを売っていますが,かなり黒に近い感じ(違法っぽい?)グレーゾーンだったのでどうしようか調べてみた。すると,Cinema4Dには学生版があるとの事!しかも無料(1年半限定)!これはやるしかない。なぜなら僕は学生だから。Cinema4D Student の機能制限が気になる人は→MAXON | 3D FOR THE REAL WORLD: 学生版。
学生じゃない人はどうすればいいか...。とりあえず,期間限定などもあるみたいなので考えてみてはいかがでしょうか→MAXON | 3D FOR THE REAL WORLD: 期間限定ライセンス。どっちにしても高いので,僕が学生じゃなかったらソフトの購入に走りそう.自分の気合とかやる気とかと相談して購入を決めてみてください。
申し込み時に気をつけること
Cinema4D Studentを使うためには学生であることを証明するものを提出し,アクティベーションコードを発行してもらうための申請が必要です。申請方法などはMAXONのページに従えば良いだけです→CINEMA 4D無償学生版申請方法 | CINEMA 4D学生サイト。ここで気をつけて欲しいことは,学生証以外に在学証明書を提出する場合です。申し込みページになればわかると思いますが,学生証と在学証明書を提出する枠は「1箇所」しかないのです。MAXONのサイトにも書いてありますが,学生証と在学証明書を提出する場合は,2つの画像を1つにして提出しなければならないのです。ちなみに,間違えても後から再提出すれば大丈夫です。気をつけましょう(僕は間違えた)。
次回予告
次は,Cinema4Dを勉強してみるのにどうすれば良いかなどを書けたら良いな。調べてみると色々出てくるので,待ちきれない人は自分の力でレッツとらい。
Raspbery Pi と PHP でTwitterにつぶやきを投稿してみよう エラー解決編!
前回:Raspbery Pi と PHP でTwitterにつぶやきを投稿してみよう編! - ATG_voip’s blog
今回の題:よくあるエラーについて解決!
今回は前回のつぶやき投稿をやってみたが、よく分からないエラーがでてしまって…。という方向けです。
というか、自分がやってしまった失敗例な感じで上げていきたいと思います。
よくあるエラー集
・Raspberry Pi の内部の時計がリアルタイムではないためにツイート失敗
解決方法その1:コマンドを手動で実行して時計をリアルタイムに合わせる。
コマンドとしては下記のように入力しエンターするだけ。
(例:2015年3月25日 17時2分に設定する場合)
pi@raspberrypi ~ $ sudo date -s "03/25 17:02 2015"
解決方法その2:リアルタイムに合わせるために色々書き換え。
やり方は参考サイトを見てね(テヘペロ)。
参考サイト:Raspberry Piの設定【NTPデーモンの設定】 - Aldebaranな人のブログ
ちなみに私のラズパイが動いている場所はプロキシを挟んでいるせいなのか、ここの方法では解決できなかったので毎回、手動で時間を合わせてます。
ダレカタスケテー。
・OpenSSLのバージョンが低い?ためにツイート失敗
これについては原因がよくわからないがバージョンの関係でツイートできないことがあった(実体験)。とりあえず、Raspberry Piの中にOpenSSLが無いと意味ないのでインストールコマンドを実行。※既にインストールされているなら実行しなくても良い
pi@raspberrypi ~ $ sudo apt-get install openssl
インストールされたOpenSSLのバージョンが最新でない可能性もあるのでとりあえずアップデートしましょう。
コマンドとしては下記のように入力、エンター(とりあえず、全部アップデート)
pi@raspberrypi ~ $ sudo apt-get upgrade
事例を2つしか書いてませんが。。。
これでツイート失敗からツイート成功出来ましたでしょうか?
それでエラー吐くというかたはコメントお願いします。一緒に悩みましょう。
次回は何を書こうか迷い迷いです。
botが特定の言葉が来たら、それに対してリプライするプログラムか、
USBのWebカメラで写真を撮って、写真付きツイートなど最近になってできるようになったのでその辺を書くか、
もしくは、Felicaリーダー(Pasori)について書こうかと思います。
次回がいつになるかお楽しみ!
Raspbery Pi と PHP でTwitterにつぶやきを投稿してみよう編!
前回:Raspbery Pi を使ってTwitterでつぶやこう 準備編 - ATG_voip’s blog
どうも。
今忙しくてハショリハショリで書いちゃってます。
余裕ができたらもう少し詳しく解説?を追加しようかと思います。
ファイル構成
ファイル構成は以下のような感じに作成します。
PHPのソースコード
以下にTweetTest.phpのソースコードを示します。
私は訳あってプロキシを通しての環境なのでプロキシを通してツイートしています。
なので、同じ境遇の方でチャレンジしたい人はソースにあるプロキシの設定をしてください。
文字コード:UTF-8
実行してつぶやこう!
実際につぶやいてみましょう。
上記にあるファイル構成通り出来ましたでしょうか?
では、下のコマンドを入力して実行してみましょう。
pi@raspberrypi ~ $ php /home/pi/phpbot/TestTweet.php
このソースで動かなかった方はコメントお願いします。
Raspbery Pi を使ってTwitterでつぶやこう 準備編
前回:Raspbery Pi のファイルにアクセスしてみよう編 - ATG_voip’s blog
まず、はじめに用意するもの
- PHPを動かすためにphp5のインストール
pi@raspberrypi ~ $ sudo apt-get install php5
- TwitterOAuth認証するため、GitHubからTwitterOAuthをダウンロード↓(2015年04月10日現在)
下記のサイトを参考にして、
・Consumer Key (API Key)
・Consumer Secret (API Secret)
・Access Token
・Access Token Secret
のキーを取得して、メモしておいてください。syncer.jp
※注意
最初の登録すると「Application Settings」 と「Your Access Token」 のAccess LevelがRead Onlyになっている場合があるので注意!
また、設定を変更してもキー自体を変えない限りRead Onlyなので設定の変更後は、キーを再発行しましょう!
Raspbery Pi のファイルにアクセスしてみよう編
前回:Raspbery Pi のOSインストール編 - ATG_voip’s blog
この記事はインストール編の続編となります。RasBotのimgをSDカードに書き込んだ方への指南書になります。
実際にイチからRaspberryPiをファイルサーバーにしたい方は「Raspberry pi samba 導入」と調べれば詳細なインストール方法が載っているサイトが沢山出てくると思いますのでそちらを参考にしてください。
RaspberryPiのファイルサーバーにアクセスしてみよう
- IPアドレスを調べよう!
RaspberryPIにて次のコマンドを入力
pi@raspberrypi ~ $ ifconfig
- LANケーブル接続(有線)でRaspberry Piとルータを接続している方
eth0に 「inet addr:xxx.xxx.xxx.xxx」というアドレスがあるのでそれを控える
- 無線子機やWifiを使ってRaspberry Piとルータを接続している方
設定にもよるが、デフォルトではwlan0に設定がなされているはず。なので
wlan0に 「inet addr:xxx.xxx.xxx.xxx」というアドレスがあるのでそれを控える