Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从连接到Raspberry Pi的两个RFID RC522读卡器读取序列号、时间戳等数据_Javascript_Node.js_Raspberry Pi_Rfid - Fatal编程技术网

Javascript 从连接到Raspberry Pi的两个RFID RC522读卡器读取序列号、时间戳等数据

Javascript 从连接到Raspberry Pi的两个RFID RC522读卡器读取序列号、时间戳等数据,javascript,node.js,raspberry-pi,rfid,Javascript,Node.js,Raspberry Pi,Rfid,有人能帮我从两个连接到Raspbery Pi的rfid阅读器上读取序列号和时间戳吗?有一些解决方案是用python、c.Net编写的,但没有javascript 我试图用Node Js实现,但没有找到任何有用的资源来从两个rfid阅读器读取数据 非常感谢您要从多个RFID阅读器读取数据,您可以使用以下方法: 一,。要从节点读取数据,请执行以下操作: 有几个项目涉及从节点读取RFID标签,例如和 此外,还包括一些npm包,例如: 甚至还有一些是专门针对RC522的,例如 二,。对于多个读卡器: 每

有人能帮我从两个连接到Raspbery Pi的rfid阅读器上读取序列号和时间戳吗?有一些解决方案是用python、c.Net编写的,但没有javascript

我试图用Node Js实现,但没有找到任何有用的资源来从两个rfid阅读器读取数据


非常感谢您要从多个RFID阅读器读取数据,您可以使用以下方法:

一,。要从节点读取数据,请执行以下操作:

有几个项目涉及从节点读取RFID标签,例如和

此外,还包括一些npm包,例如:

甚至还有一些是专门针对RC522的,例如

二,。对于多个读卡器:


每个读卡器都应该由一个唯一的串行端口提供。这需要传递到步骤1中的代码。

这是Raspbery pi上windows 10 uwp应用程序的示例。在uwp concept上使用异步编程时必须非常小心

using System;   
using System.Collections.ObjectModel;   
using System.Threading;   
using System.Threading.Tasks;   
using Windows.Devices.Enumeration;   
using Windows.Devices.SerialCommunication;   
using Windows.Storage.Streams;   
using Windows.UI.Xaml;   
using Windows.UI.Xaml.Controls;  

namespace Prova_comunicazione_seriale   
{   

     public sealed partial class MainPage : Page   
     {   

         private SerialDevice serialPort = null;  
        DataWriter dataWriteObject = null;   
         DataReader dataReaderObject = null;  
        private ObservableCollection<DeviceInformation> listOfDevices;   
         private CancellationTokenSource ReadCancellationTokenSource;  
        public MainPage()   
         {   
             InitializeComponent();  
            btnAccendiled.IsEnabled = false;   
             btnSpegniled.IsEnabled = false;   
             listOfDevices = new ObservableCollection<DeviceInformation>();   
             ListAvailablePorts();   
         }  

         private async void ListAvailablePorts()   
         {   
             try   
             {   
                 string aqs = SerialDevice.GetDeviceSelector();   
                 var dis = await DeviceInformation.FindAllAsync(aqs);  
                for (int i = 0; i < dis.Count; i++)   
                 {   
                     listOfDevices.Add(dis[i]);   
                 }  
                lstSerialDevices.ItemsSource = listOfDevices;   
                 btnAccendiled.IsEnabled = true;   
                 btnSpegniled.IsEnabled = true;   
                 lstSerialDevices.SelectedIndex = -1;   
             }   
             catch (Exception ex)   
             {   
                 tbkAllarmi.Text = ex.Message;   
             }   
         }  

         private async void ButtonClick(object sender, RoutedEventArgs e)   
         {   
             var buttonClicked = sender as Button;  
            switch(buttonClicked.Name)   
             {   
                 case "btnSerialConnect":   
                     SerialPortConfiguration();   
                     break;  
                case "btnSerialDisconnect":   
                     SerialPortDisconnect();   
                     break;  
                case "btnAccendiled":   
                     if (serialPort != null)   
                     {   
                         dataWriteObject = new DataWriter(serialPort.OutputStream);   
                         await ManageLed("2");   
                     }  
                    if (dataWriteObject != null)   
                     {   
                         dataWriteObject.DetachStream();   
                         dataWriteObject = null;   
                     }  
                    break;  
                case "btnSpegniled":   
                     if (serialPort != null)   
                     {   
                         dataWriteObject = new DataWriter(serialPort.OutputStream);   
                         await ManageLed("1");   
                     }  
                    if (dataWriteObject != null)   
                     {   
                         dataWriteObject.DetachStream();   
                         dataWriteObject = null;   
                     }  
                    break;  
                case "btnPulse1000ms":   
                     if (serialPort != null)   
                     {   
                         dataWriteObject = new DataWriter(serialPort.OutputStream);   
                         await ManageLed("3");   
                     }  
                    if (dataWriteObject != null)   
                     {   
                         dataWriteObject.DetachStream();   
                         dataWriteObject = null;   
                     }  
                    break;  
                case "btnPulse2000ms":   
                     if (serialPort != null)   
                     {   
                         dataWriteObject = new DataWriter(serialPort.OutputStream);   
                         await ManageLed("4");   
                     }  
                    if (dataWriteObject != null)   
                     {   
                         dataWriteObject.DetachStream();   
                         dataWriteObject = null;   
                     }  
                    break;   
             }   
         }  

         private  async void SerialPortConfiguration()   
         {   
             var selection = lstSerialDevices.SelectedItems;  
            if (selection.Count <= 0)   
             {   
                 tbkAllarmi.Text = "Seleziona un oggetto per la connessione seriale!";   
                 return;   
             }  
            DeviceInformation entry = (DeviceInformation)selection[0];  
            try   
             {   
                 serialPort = await SerialDevice.FromIdAsync(entry.Id);   
                 serialPort.WriteTimeout = TimeSpan.FromMilliseconds(1000);   
                 serialPort.ReadTimeout = TimeSpan.FromMilliseconds(1000);   
                 serialPort.BaudRate = 9600;   
                 serialPort.Parity = SerialParity.None;   
                 serialPort.StopBits = SerialStopBitCount.One;   
                 serialPort.DataBits = 8;   
                 serialPort.Handshake = SerialHandshake.None;   
                 tbkAllarmi.Text = "Porta seriale correttamente configurata!";  
                ReadCancellationTokenSource = new CancellationTokenSource();  
                Listen();   
             }  
            catch (Exception ex)   
             {   
                 tbkAllarmi.Text = ex.Message;   
                 btnAccendiled.IsEnabled = false;   
                 btnSpegniled.IsEnabled = false;   
             }   
         }  

         private void SerialPortDisconnect()   
         {   
             try   
             {   
                 CancelReadTask();   
                 CloseDevice();   
                 ListAvailablePorts();   
             }   
             catch (Exception ex)   
             {   
                 tbkAllarmi.Text = ex.Message;   
             }   
         }  

         private async Task ManageLed(string value)   
         {   
             var accendiLed = value;  
            Task<UInt32> storeAsyncTask;  
            if (accendiLed.Length != 0)   
             {   
                 dataWriteObject.WriteString(accendiLed);                  
                storeAsyncTask = dataWriteObject.StoreAsync().AsTask();  
                UInt32 bytesWritten = await storeAsyncTask;   
                 if (bytesWritten > 0)   
                 {   
                     tbkAllarmi.Text = "Valore inviato correttamente";   
                 }   
             }  
            else   
             {   
                 tbkAllarmi.Text = "Nessun valore inviato";   
             }   
         }  

         private async void Listen()   
         {   
             try   
             {   
                 if (serialPort != null)   
                 {   
                     dataReaderObject = new DataReader(serialPort.InputStream);  
                    while (true)   
                     {   
                         await ReadData(ReadCancellationTokenSource.Token);   
                     }   
                 }   
             }  
            catch (Exception ex)   
             {   
                 tbkAllarmi.Text = ex.Message;  
                if (ex.GetType().Name == "TaskCanceledException")   
                 {   
                     CloseDevice();   
                 }  
                else   
                 {   
                     tbkAllarmi.Text = "Task annullato";   
                 }   
             }  
            finally   
             {   
                 if (dataReaderObject != null)   
                 {   
                     dataReaderObject.DetachStream();   
                     dataReaderObject = null;   
                 }   
             }   
         }  

         private async Task ReadData(CancellationToken cancellationToken)   
         {   
             Task<UInt32> loadAsyncTask;  
            uint ReadBufferLength = 1024;  
            cancellationToken.ThrowIfCancellationRequested();  
            dataReaderObject.InputStreamOptions = InputStreamOptions.Partial;  
            loadAsyncTask = dataReaderObject.LoadAsync(ReadBufferLength).AsTask(cancellationToken);  
            UInt32 bytesRead = await loadAsyncTask;   
             if (bytesRead > 0)   
             {   
                 tbkStatusLed.Text = dataReaderObject.ReadString(bytesRead);                 
             }   
         }  

         private void CancelReadTask()   
         {   
             if (ReadCancellationTokenSource != null)   
             {   
                 if (!ReadCancellationTokenSource.IsCancellationRequested)   
                 {   
                     ReadCancellationTokenSource.Cancel();   
                 }   
             }   
         }  

         private void CloseDevice()   
         {   
             if (serialPort != null)   
             {   
                 serialPort.Dispose();   
             }   
             serialPort = null;  
            btnAccendiled.IsEnabled = false;   
             btnSpegniled.IsEnabled = false;   
             listOfDevices.Clear();   
         }   
     }   
}
}

这是太多的代码,没有足够的解释。