arduino + felicaport でURLをプッシュする
先週あたりからarduinoをいじりはじめまして。
目的はfelica搭載携帯にURLをプッシュする事。
いろいろ調べて2週間くらいかかってようやく事が実現できました
お世話になった所
Arduino日本語リファレンス
リーダライタ端末からの携帯ブラウザ起動等(三者間push)に関する情報
三者間通信
アトリエのどか
ASCIIコード表
今回はアトリエのどか様の所のコードを少し改変して使用しました。
#include#include #include #define COMMAND_TIMEOUT 400 #define PUSH_TIMEOUT 2100 #define POLLING_INTERVAL 500 #define LED_PIN 13 RCS620S rcs620s; int waitCardReleased = 0; void setup() { int ret; digitalWrite(LED_PIN, LOW); pinMode(LED_PIN, OUTPUT); Serial.begin(115200); ret = rcs620s.initDevice(); while (!ret) {} } int get_push_data(char url, uint8_t *data, byte *data_length) { word chksum = 0; word cnt = 0; word str_len = (word) (strlen(url)+2); // url + paramsize chksum += data[cnt] = 0x01; // must cnt++; chksum += data[cnt] = 0x02; // run browser cnt++; chksum += data[cnt] = (byte) (str_len & 0x00ff); cnt++; chksum += data[cnt] = (byte)((str_len & 0xff00) >> 8); cnt++; str_len -=2; // url size chksum += data[cnt] = (byte)(str_len & 0x00ff); cnt++; chksum += data[cnt] = (byte)((str_len & 0xff00) >> 8); cnt++; // url body for(int i = 0; i < str_len; i++) { chksum += data[cnt] = url[i]; cnt++; } word sum = (word)-chksum; data[cnt] = (byte)((sum & 0xff00) >> 8); cnt++; data[cnt] = (byte)(sum & 0x00ff); cnt++; *data_length = cnt; return cnt; } void loop() { int ret; // Polling digitalWrite(LED_PIN, HIGH); rcs620s.timeout = COMMAND_TIMEOUT; ret = rcs620s.polling(); if (!ret) { if (waitCardReleased) { waitCardReleased = 0; } } else if (!waitCardReleased) { // Push char url = "http://www.hogehoge.co.jp"; byte len; uint8_t data[192]; int datasize = get_push_data(url, data, &len); rcs620s.timeout = PUSH_TIMEOUT; ret = rcs620s.push(data, datasize); if (ret) { waitCardReleased = 1; } } rcs620s.rfOff(); digitalWrite(LED_PIN, LOW); delay(POLLING_INTERVAL); }