Coletânea de exemplos práticos usando o SDK Octane da Impinj para leitores RFID da série R700 (e compatíveis). Comecei esse repo quando precisei integrar leitores Impinj em alguns projetos no trabalho e fui documentando os casos de uso que foram aparecendo.
| Projeto | Descrição |
|---|---|
| read-process-data | Leitura básica de tags - ponto de partida |
| near-at-hand | Leitura com FastID (pega o TID junto) |
| gpo-find-tag | Ativa saída GPO quando encontra tags específicas |
| gpo-find-prefix | Filtra tags por prefixo do EPC |
| tag-counter-prefix | Contador de tags únicas com filtro de prefixo |
| inventory-to-csv | Exporta inventário completo pra CSV |
| report-server-rule | Envia leituras pra API REST com debounce |
| write-tag-data | Gravação de EPC em tags (cuidado!) |
| structured | Versão mais "enterprise" com DI e filas |
- .NET 9 SDK (ou 8, deve funcionar)
- Impinj Octane SDK (via NuGet, já tá referenciado nos projetos)
- Um leitor Impinj (R700, R420, xSpan, etc) na rede
# Clone
git clone https://github.com/LucasDiasJorge/Impinj-Octane-Implementation.git
cd Impinj-Octane-Implementation
# Escolhe um projeto
cd read-process-data
# Ajusta o IP do leitor no Program.cs (sim, tá hardcoded, eu sei)
# Depois roda
dotnet runA maioria dos exemplos espera que você ajuste o IP direto no código. Eu sei que deveria usar appsettings ou variáveis de ambiente, mas esses são exemplos rápidos. O projeto structured usa appsettings.json se você quiser algo mais configurável.
Coisas que você vai querer ajustar:
- IP do leitor (
readerHostname) - Antenas ativas (1-4 dependendo do modelo)
- Potência de transmissão (TxPowerInDbm)
- Sessão do protocolo EPC Gen2
Sobre potência: Não precisa meter 30dBm em tudo. Pra testes de bancada, 15-20dBm costuma ser suficiente. Potência alta = mais interferência.
Sobre sessões: Session 1 é boa pra leitura contínua, Session 2 pra inventário onde você quer ler tudo uma vez. Tem nuances, mas isso cobre 90% dos casos.
Sobre o SDK: O Octane SDK é bem estável mas a documentação oficial é meio fraca. Recomendo brincar com os exemplos daqui e ir testando.
Todo exemplo segue mais ou menos esse padrão:
ImpinjReader reader = new ImpinjReader();
reader.Connect("IP_DO_LEITOR");
Settings settings = reader.QueryDefaultSettings();
// configura o que precisa
reader.ApplySettings(settings);
reader.TagsReported += (sender, report) => {
foreach (Tag tag in report) {
// processa a tag
}
};
reader.Start();
Console.ReadLine(); // espera input pra parar
reader.Stop();
reader.Disconnect();O básico do básico. Conecta no leitor, lê tags e printa no console. Bom pra testar se o leitor tá funcionando.
Usa o FastID pra ler o TID da tag junto com o EPC. Útil quando você precisa de um identificador único de fábrica da tag (o TID é gravado pelo fabricante e não dá pra alterar).
Liga uma saída GPO (General Purpose Output) quando detecta tags específicas. Usei isso num projeto onde precisava ativar uma cancela quando um veículo autorizado chegava.
Conta quantas tags únicas com determinado prefixo estão no campo. Pede o prefixo e IP no início da execução.
Faz um inventário e exporta pra CSV. Guarda primeira/última leitura, antena, contagem de leituras. Bom pra conferência de estoque.
Envia cada leitura pra uma API REST, mas com um filtro temporal pra não floodar o servidor (mesma tag só é reportada de novo depois de X segundos).
Use com cuidado. Grava novos EPCs nas tags. Você precisa saber o TID da tag pra escrever nela (evita escrever na tag errada).
Uma versão mais organizada usando injeção de dependência, filas de processamento, configuração via appsettings. Se você for fazer algo pra produção, olha esse.
"Erro no SDK: Connection refused"
- Verifica se o IP tá certo
- Verifica se o leitor tá ligado e na mesma rede
- Tenta dar um ping no IP do leitor
Não lê nenhuma tag
- Verifica se a antena tá habilitada (padrão é tudo desabilitado)
- Verifica se a potência não tá muito baixa
- Verifica se a tag tá no campo de leitura da antena
Lê a mesma tag mil vezes por segundo
- Normal pro modo Individual. Se não quer isso, usa SearchMode.SingleTarget ou aumenta o tempo entre reports
Se quiser adicionar mais exemplos ou melhorar os existentes, manda um PR. Não tem muito formalismo não.
MIT - Faz o que quiser com isso. Se ajudou, deixa uma star.