Skip to content

LucasDiasJorge/Impinj-Octane-Implementation

Repository files navigation

Impinj Octane SDK - Exemplos e Implementações

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.

O que tem aqui

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

Pré-requisitos

  • .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

Como rodar

# 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 run

Configuração do leitor

A 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

Alguns pontos importantes

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.

Estrutura básica

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();

Projetos em mais detalhe

read-process-data

O básico do básico. Conecta no leitor, lê tags e printa no console. Bom pra testar se o leitor tá funcionando.

near-at-hand

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).

gpo-find-tag

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.

tag-counter-prefix

Conta quantas tags únicas com determinado prefixo estão no campo. Pede o prefixo e IP no início da execução.

inventory-to-csv

Faz um inventário e exporta pra CSV. Guarda primeira/última leitura, antena, contagem de leituras. Bom pra conferência de estoque.

report-server-rule

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).

write-tag-data

Use com cuidado. Grava novos EPCs nas tags. Você precisa saber o TID da tag pra escrever nela (evita escrever na tag errada).

structured

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.

Troubleshooting

"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

Contribuindo

Se quiser adicionar mais exemplos ou melhorar os existentes, manda um PR. Não tem muito formalismo não.

Licença

MIT - Faz o que quiser com isso. Se ajudou, deixa uma star.

About

Impinj Octane sdk implementation for multiple solutions

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors