Pythonでtwitter監視、朝日のニュースがあればミニプリンタへ出力

これをもう少しきれいにして、動作させてみた。動画を公開します。

Mac側でPythonにてTwitterの自分のタイムラインを監視してます。試しに、ユーザー名に「asahi(朝日新聞系アカウント)」が入っているユーザーがつぶやいたら、それを英訳­(ただプリンタが日本語対応していないから)して、ネットに接続されたArduinoに送信、それに接続されたサーマルプリンタ­ーへ出力させている。結構面白いと思うんだけど…。いかがでしょう。

PythonでTwitter解析して、Arduinoに接続したサーマルプリンターで内容を出力

色々応用が効きそうなので。

サーマルプリンターとArduinoの接続は、ここを参照してください。

まずはPythonのコード。Python-Twitterを使っています。コードはあまり上手じゃないな…

import twitter
import sys
import socket
import datetime
import locale
import getpass
import sys
import telnetlib
import time
api = twitter.Api(consumer_key='***************************',
consumer_secret='***************************',
access_token_key='***************************',
access_token_secret='***************************')
host = '192.168.10.88'
port = 10000
tn = telnetlib.Telnet(host)
while True:
statuses = api.GetFriendsTimeline(count=100,retweets=True,since_id=id)
for status in statuses:
if 'Lytro' in status.text: #もしつぶやきにLytroという文字列があれば、
     #telnetで送信。
print status.user.screen_name , status.text , status.id
d = datetime.datetime.today()
send_msg = d.strftime("%Y-%m-%d %H:%M:%S")+" "
+status.user.screen_name+" "+status.text+"\n"
unicode_msg=send_msg.encode('utf-8')
tn.write(unicode_msg)
time.sleep(60);

続いて、Arduinoのスケッチ。

//http://arduino.cc/en/Tutorial/ChatServerをご参照ください。
#include          // needed for Arduino versions later than 0018
#include
#include
int printer_RX_Pin = 2;
int printer_TX_Pin = 3;
Thermal printer(printer_RX_Pin, printer_TX_Pin, 19200);
// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[]	= { 0x90, 0xA2, 0xDA, 0x00, 0x00, 0x00 };
IPAddress ip( 192 , 168 , 10 , 88 ) ;  //
IPAddress gateway(192, 168, 10, 1);
IPAddress subnet(255, 255, 255, 0);
EthernetServer server(23);
boolean gotAMessage = false; // whether or not you got a message from the client yet
void setup() {
Ethernet.begin(mac,ip,gateway,subnet);
server.begin();
Serial.begin(9600);
printer.justify('L');
//印字の色を濃くする。
printer.setHeatInterval(255);
printer.setHeatTime(255);
}
void loop() {
// if there's data available, read a packet
EthernetClient client = server.available();
// when the client sends the first byte, say hello:
if (client) {
if (!gotAMessage) {
Serial.println("We have a new client");
client.println("Hello, client!");
gotAMessage = true;
}
// read the bytes incoming from the client:
char thisChar = client.read();
// echo the bytes back to the client:
server.write(thisChar);
// echo the bytes to the server as well:
Serial.print(thisChar);
//受信した文字列をプリンターに出力。
printer.print(thisChar);
}
}

1分間おきに、自分のタイムラインを監視して、もし、”Lytro”という文字列があるツイートがあれば、Telnetで記録時間やアカウント名、内容をArduinoに送信、印字されるという仕組みです。

ArduinoとMZK-MF300Dを接続し、Arduinoを無線LAN化して、なかなか楽しいことになっています。サーマルプリンターが英語しか印字できませんが、使いようによっては、有益な情報を自動でどんどん紙に印字してくれるという、夢が広がりますね。

Arduino + サーマルプリンター その後

本日届きました。Arduinoと接続できるプリンターでです。

つなぎ方やライブラリは、Displaying on Paper – Thermal Printer + Arduinoを見れば一発。ここでダウンロードできるライブラリに、サンプルコードがついていたので、早速動かすことができた。素晴らしい。

  1. 上記のリンクでダウンロードしたファイルを解凍し、解凍したファイルの中にある「Thermal」ディレクトリを(home directory)/Documents/Arduino/librariesにコピー
  2. 上記のリンクにある画像のように、Arduinoとサーマルプリンターを接続。私は接続には、ジャンパーコードを用いた。下の図のような感じ。
  3. サンプルコード(Thermal_Example.ino)を走らせる。なお、Arduino1.0以上じゃないと動かない。

もちろん日本語は出ないけど、バーコードとかも簡単に出せるんですよね。

Arduino + サーマルプリンター

こんなのかってみた。送料込みでだいたい80ドル(送料が一番安くて17ドル)。

http://www.adafruit.com/products/600#tutorials

Thermalprintstarter_MED

Arduinoにつなげて、なんか印刷できるみたい。テンション上がりますな。

これの中にある「ネット依存を解消するアクセス監視システム」で、アクセス履歴をプリンターに出すようなものを作っていたもので。

ソレノイドアクチュエーター+Arduino+MP4209

ソレノイドアクチュエーター(以下、ソレノイド)を、Arduinoと、パワーMOSFETのMP4209で制御した時のメモ。

ソレノイドはマルツパーツ館で購入したMD-252。これは12V駆動だから、Arduinoの出力ではそのまま使用できない。12Vの外部電源(アダプタ)が必要。

  • Arduinoのデジタル出力2番端子を、MP4209の2番端子(ゲート)と接続。
  • ソレノイドの端子には、12V電源の+と、MP4209の3番端子(ドレイン)と接続。
  • MP4209の1番端子とArduinoのGNDは、GNDに接続。

おお、動いた。以下はArduinoのスケッチ。もう、基本のキのソースコード。一秒ごとにソレノイドがピストン運動(性格にはくっついたり離れたり)します。

void setup() {
// initialize the digital pin as an output.
// Pin 13 has an LED connected on most Arduino boards:
pinMode(2, OUTPUT);
}
void loop() {
digitalWrite(2, HIGH);   // set the LED on
delay(1000);              // wait for a second
digitalWrite(2, LOW);    // set the LED off
delay(1000);              // wait for a second
}

とまあ、こんなことを書いていこうかと。