#やりたいこと
Arduinoと指紋認証センサのZFM-20を用いて、指紋データと紐付けされたID番号をシリアル通信によりRaspberryPiへ送信してテキスト出力したいです。
IDと指紋の登録にはこちらで提供されているenroll、確認にはfingerprintを用いました。
今回使用したArduinoのソースコードはfingerprintを一部改変して使用しました。
RaspberryPiとArduinoはusbケーブルで接続されています。
##できないこと
テキストファイルが正しく出力されません。
ID番号ではなく、シリアルモニタに出力している文字列の一部が出力されてしまいます。
enrollにより指紋とID番号2との紐付けは出来ております。
##Ardunioのソースコード
void loopの部分でID番号の送信を行わせたいです。
ino
1/*************************************************** 2 This is an example sketch for our optical Fingerprint sensor 3 4 Designed specifically to work with the Adafruit BMP085 Breakout 5 ----> http://www.adafruit.com/products/751 6 7 These displays use TTL Serial to communicate, 2 pins are required to 8 interface 9 Adafruit invests time and resources providing this open source code, 10 please support Adafruit and open-source hardware by purchasing 11 products from Adafruit! 12 13 Written by Limor Fried/Ladyada for Adafruit Industries. 14 BSD license, all text above must be included in any redistribution 15 ****************************************************/ 16 17 18#include "./Adafruit_Fingerprint.h" 19#include <stdio.h> 20#include <stdlib.h> 21// On Leonardo/Micro or others with hardware serial, use those! #0 is green wire, #1 is white 22// uncomment this line: 23// #define mySerial Serial1 24 25// For UNO and others without hardware serial, we must use software serial... 26// pin #2 is IN from sensor (GREEN wire) 27// pin #3 is OUT from arduino (WHITE wire) 28// comment these two lines if using hardware serial 29#include <SoftwareSerial.h> 30 31 32SoftwareSerial mySerial(2, 3); 33 34Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial); 35FILE *fp; 36 37void setup() 38{ 39 Serial.begin(9600); 40 while (!Serial); // For Yun/Leo/Micro/Zero/... 41 delay(100); 42 Serial.println("\n\nAdafruit finger detect test"); 43 44 // set the data rate for the sensor serial port 45 finger.begin(57600); 46 47 if (finger.verifyPassword()) { 48 Serial.println("Found fingerprint sensor!"); 49 } else { 50 Serial.println("Did not find fingerprint sensor :("); 51 while (1) { delay(1); } 52 } 53 54 finger.getTemplateCount(); 55 Serial.print("Sensor contains "); Serial.print(finger.templateCount); Serial.println(" templates"); 56 Serial.println("Waiting for valid finger..."); 57} 58 59void loop() // run over and over again 60{ 61 //追加部分 62 int id; 63 id = getFingerprintIDez(); 64 Serial.write(id); 65 delay(20); 66 //追加部分 67 68 fprintf(fp,"%d",id); 69 fclose(fp); 70 delay(50); //don't ned to run this at full speed. 71} 72 73 74 75uint8_t getFingerprintID() { 76 uint8_t p = finger.getImage(); 77 switch (p) { 78 case FINGERPRINT_OK: 79 Serial.println("Image taken"); 80 break; 81 case FINGERPRINT_NOFINGER: 82 Serial.println("No finger detected"); 83 return p; 84 case FINGERPRINT_PACKETRECIEVEERR: 85 Serial.println("Communication error"); 86 return p; 87 case FINGERPRINT_IMAGEFAIL: 88 Serial.println("Imaging error"); 89 return p; 90 default: 91 Serial.println("Unknown error"); 92 return p; 93 } 94 95 // OK success! 96 97 p = finger.image2Tz(); 98 switch (p) { 99 case FINGERPRINT_OK: 100 Serial.println("Image converted"); 101 break; 102 case FINGERPRINT_IMAGEMESS: 103 Serial.println("Image too messy"); 104 return p; 105 case FINGERPRINT_PACKETRECIEVEERR: 106 Serial.println("Communication error"); 107 return p; 108 case FINGERPRINT_FEATUREFAIL: 109 Serial.println("Could not find fingerprint features"); 110 return p; 111 case FINGERPRINT_INVALIDIMAGE: 112 Serial.println("Could not find fingerprint features"); 113 return p; 114 default: 115 Serial.println("Unknown error"); 116 return p; 117 } 118 119 // OK converted! 120 p = finger.fingerFastSearch(); 121 if (p == FINGERPRINT_OK) { 122 Serial.println("Found a print match!"); 123 } else if (p == FINGERPRINT_PACKETRECIEVEERR) { 124 Serial.println("Communication error"); 125 return p; 126 } else if (p == FINGERPRINT_NOTFOUND) { 127 Serial.println("Did not find a match"); 128 return p; 129 } else { 130 Serial.println("Unknown error"); 131 return p; 132 } 133 134 // found a match! 135 Serial.print("Found ID #"); Serial.print(finger.fingerID); 136 Serial.print(" with confidence of "); Serial.println(finger.confidence); 137 138 return finger.fingerID; 139} 140 141// returns -1 if failed, otherwise returns ID # 142int getFingerprintIDez() { 143 uint8_t p = finger.getImage(); 144 if (p != FINGERPRINT_OK) return -1; 145 146 p = finger.image2Tz(); 147 if (p != FINGERPRINT_OK) return -1; 148 149 p = finger.fingerFastSearch(); 150 if (p != FINGERPRINT_OK) return -1; 151 152 // found a match! 153 Serial.print("Found ID #"); Serial.print(finger.fingerID); 154 Serial.print(" with confidence of "); Serial.println(finger.confidence); 155 return finger.fingerID; 156}
##Arduinoのシリアルモニタ
シリアルモニタの画像です。
5行目の「Found ID #2 ...」から指紋とIDの紐付けが確実に行われていることが分かります。
このID番号を出力させたいのですが、現在はモニタ内の文章の一部がテキストファイルに出力されてしまいます。
Python
1# -*- encoding: utf-8 -*- 2 3import serial 4import time 5 6ser = serial.Serial('/dev/ttyACM0',9600) 7time.sleep(2)#boottime 8 9str = ser.read(5) 10f = open('text.txt','w') 11f.write(str) 12f.close()
##出力されたtxtファイル
上記のシリアルモニタ内の「Adafruit finger....」のAdaの部分が出力されています。
txt
1 2 3Ada
分かりにくい部分があれば連絡お願い致します。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/02 10:31
2018/02/02 11:00
2018/02/02 11:09