洗車時のArduino、パート2

セルフサービスの洗車でのArduinoの使用を引き続き検討しています。 ネットワークで作業し、Cashcode請求書受領者と通信することを検討してください。 こちらをご覧ください



インターネットクライアント



クライアントとサーバーをすぐにアクティブにします。



#include <Ethernet.h> EthernetServer server(80); byte mac[] = { 0xDE, 0x23, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(192, 168, 1, 100); Ethernet.begin(mac, ip); server.begin();
      
      





たとえば、受け入れられた請求書に関する情報をサーバーに送信します。



 int sendInfo(string pay) { EthernetClient client; if (client.connect(domenip, 80) ) { client.println("GET /get_money.php?pay="+pay+" HTTP/1.1"); client.println("Host: www.domen.ru"); client.println("Connection: keep-alive"); client.println(); } else { Serial.println("connection failed"); return 0; } delay(100); char c; while (client.available()) { c=client.read(); } client.stop(); return (1); }
      
      





サーバー



前のセクションで有効化。 リクエストを確認してください。



 for (int sock = 0; sock < MAX_SOCK_NUM; sock++) { EthernetClient sclient = server.available_(sock); myserver(sclient); }
      
      





私たちは要求を満たします。 応答では、機器(タイマー)の1分のコストの現在値を表示します。



 void myserver(EthernetClient client) { if (!client) return; char clientline[100]; int index = 0; while (client.available()) { char c = client.read(); if(index<99) clientline[index] = c; index++; } if(strstr(clientline, "water")!=NULL) digitalWrite(2, LOW); // if(strstr(clientline, "pena")!=NULL) digitalWrite(3, LOW); // if(strstr(clientline, "vosk")!=NULL) digitalWrite(4, LOW); // client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connection: close"); client.println(); client.println("<!DOCTYPE HTML>"); client.println("<html>"); for (int j = 1; j < 6; j++) { client.print("timer "); client.print(j); client.print(" is "); client.print(EEPROM.read(j)); client.println("<br />"); } client.println("</html>"); delay(100); client.stop(); }
      
      





請求書受領者のキャッシュコード



SoftwareSerialライブラリを使用して、TTLレベルでシリアルポートを介して動作します。



 SoftwareSerial mySerial(14, 15); // RX, TX uint8_t poll[] = {0x02, 0x03, 0x06, 0x33, 0xDA, 0x81}; uint8_t ack[] = {0x02, 0x03, 0x06, 0x00, 0x0C2, 0x82};
      
      





すでに述べたように、CashcodeはCCNETプロトコルで動作します。 オプションがありますので、販売者に確認する必要があります。 プロトコルの本質は、システムが定期的に(1秒間に数回で十分です)、請求書受領者にそのステータスを要求することです(POOLコマンド)。 彼は答えます。 応答に情報が含まれている場合は、適切なコマンド(ACK)で受信を確認する必要があります。



コマンド形式:SYNC ADR LNG CMD DATA CRC



SYNC:1バイトコード[02H]

ADR:1バイトの請求書受領者のアドレス

LNG:1バイト*データ長

CMD:1バイトチーム

DATA 0〜250バイトのデータ

CRC:2バイトのチェックサム



チームを派遣しています。



 void sendCCNET(uint8_t *com) { for(char i=0; i<com[2]; i++) mySerial.write(com[i]); }
      
      





請求書受領者が応答としてコマンド0x81を送信した場合、彼は請求書を受け入れました。 データには額面の値が含まれています。 私はこれを持っています:2 = 10ルーブル、3 = 50ルーブル、4 = 100ルーブル、5 = 500ルーブル、6 = 1000ルーブル、7 = 5000ルーブル。 ファームウェアに応じて、オプションが可能です。



All Articles