ORCA受付ボックスを作りました
日医のレセコンorcaは、せっかくHTTP方式のAPIが多く提供されているのに、それを利用したItoTガジェットのような道具がないのが残念です。そこで実用半分、お遊び半分で患者受付専用のORCA受付ボックスを作ってみました。
当院のような零細クリニックでは受付けパソコンが一台しかないので、新患情報入力で占拠されてしまったときに、とりあえず再診の患者さんの受付をする場合などに便利です。当院では患者IDは5桁の数字なので、それをキーパッド入力すると前回受診時と同じ保険組合せで受付をします。受付できるとゼロ、受付エラーのときはorcaの受付APIの結果コードApi_Resultが表示されます。
秋月電子のESP32マイコンボードとテンキーパッド、中華製6桁7セグLEDモジュールを組み合わせました。電源は単4乾電池3本を3.3vレギュレーターで降圧して使っています。
配線図は下図のとおりです。
arduinoのプログラム(スケッチ)は下記のとおりです
ORCA_POST.ino******************************************
#include <HTTPClient.h>
#include <WiFi.h>
#include "TM1637_6D.h" //6桁7セグLED用のライブラリーを利用
#define CLK 27 //pins definitions for TM1637 and can be changed to other ports
#define DIO 26
TM1637_6D tm1637_6D(CLK,DIO);
#include "Arduino.h"
#include <Keypad.h>
#define ROW_NUM 4 // four rows
#define COLUMN_NUM 3 // three columns
char keys[ROW_NUM][COLUMN_NUM] = {
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
{'*', '0', '#'}
};
byte pin_rows[ROW_NUM] = {18, 0, 4, 17}; // GIOP18, GIOP0, GIOP4, GIOP17 connect to the row pins
byte pin_column[COLUMN_NUM] = {5, 19, 16}; // GIOP5, GIOP19, GIOP16 connect to the column pins
Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM );
String Pid = "";
#define WIFI_SSID ******** // ルーターのWiFi SSID (2.4GHz only)
#endif
#ifndef WIFI_PASSWORD
#define WIFI_PASSWORD ******** // 無線ルーターのWiFiパスワード
#endif
String url = "http://192.168.0.102:8000/orca11/acceptmodv2";
void setup() {
Serial.begin(115200);
delay(500);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
tm1637_6D.init();
tm1637_6D.set(BRIGHT_TYPICAL);//BRIGHT_TYPICAL = 2,BRIGHT_DARKEST = 0,BRIGHTEST = 7;
Serial.println("Orca_Reception");
tm1637_6D.displayInteger(12345678, false);
}
void loop() {
key43();
Serial.print("受付患者ID = ");
Serial.println(Pid);
WiFiClient client;
HTTPClient http;
String json = "<data><acceptreq type=\"record\"><Request_Number type=\"string\">01</Request_Number><Patient_ID type=\"string\">" + Pid +"</Patient_ID><Department_Code type=\"string\">01</Department_Code><Physician_Code type=\"string\">10011</Physician_Code><Medical_Information type=\"string\">01</Medical_Information></acceptreq></data>";
Pid = "";
http.begin(client, url);
http.setAuthorization("Ormaster", "password"); //ORCAのIDとパスワード
//APIからのレスポンスを取得
Serial.println(json);
http.addHeader("Content-Type", "application/xml");
int responseCode = http.POST(json);
String body = http.getString();
Serial.println(responseCode);
Serial.println(body);
int api0 = body.indexOf("<Api_Result type=\"string\">") ;
String api_res = body.substring(api0+26, api0+28) ; //受付API結果コード
Serial.println(api_res);
tm1637_6D.displayInteger(api_res.toInt(), false);
http.end();
}
//テンキーパッドからのキー情報の取得とLED表示
void key43(){
char key;
do {
key = keypad.getKey();
if (key) {
if (key == '*' ){
Pid = "";
}else if( key != '#'){ //*キーを押すと入力した数字を消去
//Serial.println(key);
Serial.println(Pid += key);
tm1637_6D.displayInteger(Pid.toInt(), false);
}
}
}while (key != '#'); //#キーを押すと患者番号が確定
}
***************************************
電子工作やプログラミングにご興味のある先生のご参考になればと供覧させていただきました。
なおwifi経由で接続しますのでセキュリティーには十分ご注意ください。