2019年5月8日水曜日

バーコードリーダーで遊ぶ

最近スマホでお金が払えるみたいです。
スマホの画面にバーコードが出て、それをお店で店員に見せて、バーコードリーダーで「ぴっ」とするとお金が支払われるようです。

おじさん、これ作れる。
でも、お金やポイントの管理システム作っても面白くないなぁ。

というわけで、今回は、バーコードを読んで、WebAPIをたたいて誰かにメールを送るアプリを作ってみます。
これを作れば「子供が家に帰ってきてバーコードを読み込ませたら親にメールを送る」なんてシステムも作れます。

まず、ラズパイとかPCにバーコードリーダをつなげます。
バーコードリーダーってキーボードと同じなので、普通にscanf()とかでバーコードの値が読み込めます。
バーコードを読んでWebAPIをたたくにはこんな感じでプログラムを作ればよいです。
なんかとっても簡単。

-----------------------------------
#include <stdio.h>
#include <string.h>

void get_url_path(char* path, int sz)
{
#ifdef _WIN32
strcpy(path, ".");
#else
strcpy(path, ".");
#endif
}
int main()
{
char buf[256];
char file[256];
char code[256];
char url[1024];
char url2[1024];
char cmd[1024];
FILE* fp;

memset(url, 0, sizeof(url));
get_url_path(file, sizeof(file));
strcat(file, "/");
strcat(file, "url.txt");
fp = fopen(file, "rt");
if (fp) {
fscanf(fp, "%s", url);
fclose(fp);
}
while (1) {
buf[0] = 0;
code[0] = 0;
fgets(buf, 256, stdin);
if (buf[0] == 0)break;
sscanf(buf, "%s", code);
strcpy(url2, url);
if (strstr(url2, "?") == NULL)strcat(url2, "?");
strcat(url2, "code=");
strcat(url2,code);
sprintf(cmd, "wget --timeout=10 -O - --no-check-certificate %s", url2);
printf("cmd=%s\n",cmd);
system(cmd);
}
return 0;
}
-----------------------------------

次にメールを送るサーバを作ります。
通常サーバ立てるとお金がかかるのですが、今回はお金がかからない簡単な方法でやります。
WebAPIをGAS(GoogleAppScript)で作ります。
GASってメールを送るシステムとか表計算をするサーバシステムが簡単にWebで作れます。
メール送信システムって結構迷惑メールとかに指定されて届かないことが多いのですが、GASはそういうことも起きません。
GASに以下のスクリプトをコピペします。

-----------------------------------
var print_buf = "";
println = function(src)
{
 try{;
 Logger.log(""+src);
 }catch(e){};
 print_buf += src;
 print_buf += "\n";
}
sendEmail = function(add, title, msg)
{
 var ret = null;
 try{;
 MailApp.sendEmail(add, title, msg);
 ret="";
 }catch(e){};
 return ret;
}
start = function(str)
{
 sendEmail("your-address@gmail.com", "test", "testok");
 println("testok");
}
//GAE GET
function doGet(e)
{
 if (e == null) {
  e = new Array();
  e.queryString = "";
 }
 start(e.queryString);
 return ContentService.createTextOutput(print_buf);
}
-----------------------------------
ブラウザでデバッグできるようにいろいろなコードを追加しましたが、メールを送るだけならば、MailApp.sendEmail()の一行だけでできます。
スクリプトを張り付けて、GASのメニューから「公開」を選んで、スクリプトの設定をします。
「ウェブアプリケーションとして導入」を選び、「アプリケーションにアクセスできるユーザー」を「誰でも」に設定します。
数行プログラムするだけで365日24時間動く0円のサーバが作れちゃうんですね。


最後にurl.txtにWebAPIのURLを格納します。
GASの設定画面にでているURLをurl.txtに格納。
-----------------------------------
https://script.google.com/macros/s/AKfycbyPoJDu5V_DJmY4--M1qScXQyGZCZVIxZUZ1TEDQQQ4eYFuFBM/exec
-----------------------------------
こんなかんじ。

これでバーコードを読んでメール送るシステムが完成。
数十行コードを二つ書くだけで、かなり実用的なシステムが作れます。
これほしい人結構いると思うんだけどなぁ。
ラズパイとバーコードリーダーと解説本のセットで売れないかなぁ。



0 件のコメント:

コメントを投稿