Jeffrey Cross
Jeffrey Cross

CircuitPython serpenteia até o hardware da Adafruit

Em uma recente discussão com Scott Shawcroft, engenheiro da Adafruit, fiquei muito empolgado. Ele estava explicando sua transição para o uso do CircuitPython em seus produtos, bem como os benefícios que tal transição proporcionaria. Um grande benefício é que você simplesmente conecta o dispositivo e ele aparece como armazenamento USB, e então você coloca seu código nele. Não há necessidade de um IDE. Esta não é a primeira vez que eu vejo esse recurso, mas o fato de que a seleção de ferramentas de prototipagem de ponta da Adafruit vai me deixar extremamente animada.

O que é o CircuitPython?

O CircuitPython é um firmware de microcontrolador baseado no MicroPython que torna mais fácil do que nunca programar hardware. Ao contrário do Arduino, o código de um usuário não é armazenado no próprio firmware, mas sim em um minúsculo sistema de arquivos no chip ou na placa. Como resultado, a programação com o CircuitPython é tão simples quanto conectar a placa a um computador e editar um arquivo na unidade que aparece. Nenhum software adicional é necessário para começar.

O Arduino revolucionou o sistema embarcado, eliminando a necessidade de ferramentas caras e piscantes ao alterar o código. O CircuitPython vai além, eliminando a necessidade de drivers e softwares específicos.

Se você tivesse que resumir da maneira mais simples possível, como você descreveria o CircuitPython?

Acho que a versão mais simples não envolve reconhecer o CircuitPython ou o Python como algo separado. Ele simplesmente unifica software e hardware. Conecte um dispositivo, abra a unidade e edite o código para hackear. Salvar o arquivo automaticamente faz com que ele seja recarregado. Ejete-o como um pen drive e leve-o com você. O código faz parte do dispositivo.

Por que você escolheu implementar o CircuitPython nos produtos da Adafruit?

Para mim, é simplesmente que é mais fácil do que qualquer outra coisa usar. O CircuitPython tem uma barreira muito baixa para entrada porque funciona sem drivers especiais (exceto para serial no Windows mais antigo). Não requer nenhum programa para programá-lo, pois qualquer editor de texto simples funcionará. Qualquer programa serial pode se conectar a ele. Nenhuma conexão com a Internet é necessária para programá-lo também.

Essa baixa barreira à entrada faz com que seja perfeita para a Adafruit, porque prosperamos em ensinar os iniciantes a criar e experimentar hardware. A capacidade do CircuitPython de unificar código com hardware torna-o mais hackable do que nunca. Não é mais uma questão de enviar e-mails para alguém separadamente e, em seguida, configurá-los com um software específico. Apenas funciona.

Os produtos ainda funcionarão com o Arduino IDE?

Sim! Novos produtos baseados no SAMD21 Cortex-M0 + mcu que suportam o CircuitPython também são suportados pelo Arduino IDE e pelo Microsoft MakeCode. Acreditamos que ensinar iniciantes inicialmente com o MakeCode e depois avançar para o CircuitPython e o Arduino IDE é uma ótima maneira de ajudar os jovens programadores a crescer com a complexidade do projeto.

Por que esse método não foi feito antes? Ou se foi, quem devemos agradecer por colocar as fundações?

A execução do Python no embedded foi tentada antes com projetos como o Python-on-a-Chip e o Owl. No entanto, esses projetos não encontraram um público amplo. MicroPython finalmente fez no entanto quando eles lançaram um Kickstarter. Os desenvolvedores do MicroPython, incluindo Damien George e Paul Sokolovsky, merecem crédito por lançar as bases para o CircuitPython. Eles fizeram o trabalho duro de reimplementar o Python 3.4 em um microcontrolador e editar o código através do armazenamento em massa USB. Nós simplesmente construímos o trabalho deles para que funcione em nosso hardware e aprimore a experiência.

Que tipo de dificuldades estão envolvidas na portabilidade de seus produtos para o CircuitPython? Isso é complicado? Fácil? Nada demais?

Portar produtos para o CircuitPython significa, em grande parte, transferi-los para microcontroladores de 32 bits. O CircuitPython não suporta microcontroladores de 8 bits, portanto, afastar-se do at328p e do 32u4 para o SAMD21 torna isso possível.

Por outro lado, o MicroPython não tinha suporte para o SAMD21 (que é o chip usado em todas as nossas placas M0). Adicionando suporte a SAMD21 para MicroPython levou à nossa criação de CircuitPython. O MicroPython tinha uma noção existente de “portas” que se alinha aproximadamente com famílias de microcontroladores, como a família STM32 e famílias SAMD. Cada família possui um núcleo semelhante ao Cortex M, mas os periféricos que implementam protocolos como USB, I2C e SPI variam muito. Assim, o desafio de adicionar suporte para uma nova família de microcontroladores está no suporte periférico.

Fizemos muito trabalho para tornar isso mais fácil no futuro, estabelecendo uma API de hardware clara e orientada a funções. Essa nova API facilita a adição de suporte de hardware a uma nova porta, ajudando a garantir que os drivers existentes ainda funcionem. No futuro, à medida que expandimos para novos microcontroladores, planejamos facilitar ainda mais a adição de portas.

Foram necessárias alterações de hardware para fazer o CircuitPython funcionar em seus produtos?

Adafruit Feather M0 express

Ter um microcontrolador de 32 bits é um requisito, mas antes do CircuitPython já tínhamos um conjunto diversificado de Feathers baseados em SAMD21. O desenvolvimento inicial do CircuitPython foi feito no Feather M0 Basic e no Arduino Zero. O CircuitPlayground, o Metro, o Gemma e o Trinket foram atualizados para o SAMD21, que também habilita o CircuitPython nessas plataformas.

Para uma melhor experiência CircuitPython, introduzimos a linha Express de placas. Essas placas possuem chips externos SPI Flash que são usados ​​para armazenar código Python externamente, em vez de no microcontrolador. Isso significa que mais código pode ser armazenado (2 MB em vez de 64 KB) e o próprio firmware pode expor mais funcionalidades. Essas também foram as primeiras placas a apresentar um LED RGB de status. O novo não-Express Gemma M0 e o Trinket M0 também possuem o LED RGB, mas não possuem o flash extra.

Há alguma desvantagem para o CircuitPython que as pessoas devem ter em mente à medida que elas se desenvolvem?

A maior desvantagem do CircuitPython (e do Python em geral) é a decisão de priorizar a velocidade de desenvolvimento em relação ao espaço ocupado pela memória e à velocidade de execução. O impacto é que, dependendo do projeto, pode-se atingir um limite de memória ou limite de velocidade que eles não atingiriam com uma solução compilada como o Arduino. Por exemplo, uma animação de strip NeoPixel pode não atualizar os pixels tão rapidamente no CircuitPython como o Arduino. Ou um projeto que depende de muitas bibliotecas pode não ser capaz de ter tanta funcionalidade comparado ao código que pode ser otimizado por um compilador.

Isso não é razão suficiente para evitar o CircuitPython. A velocidade de desenvolvimento é muito mais rápida do que uma solução baseada em compilador como o Arduino, que é o melhor para testar um projeto no CircuitPython e otimizar mais tarde, conforme necessário. Normalmente, ele será executado com rapidez suficiente porque as pessoas subestimam a velocidade dos computadores.

A otimização depois que o código é escrito pode ser feito de três maneiras principais:

1) no próprio código Python 2) adicionando funcionalidade C adicional ao firmware CircuitPython conforme necessário para usar a partir do Python 3) comprando hardware mais rápido (a lei de Moore ainda está influenciando as velocidades da CPU do microcontrolador. O SAMD21 é de 48mhz mas microcontroladores de tamanho similar são executados a 200 + mhz.)

Portanto, embora haja trade-offs, o CircuitPython é geralmente o lugar certo para começar.

Onde alguém pode começar a aprender o CircuitPython? Eu assumo learn.adafruit.com, mas existe em outro lugar?

Atualmente, o melhor lugar para começar são os guias específicos do produto para Feather M0 Express e Gemma M0. Há uma variedade de projetos no sistema Learn que alavancam o CircuitPython já (caixa de botão arcade, controle de toque MPR121 e guia LIS3DH são três). Tony também vai atualizar seus antigos guias MicroPython para o CircuitPython, mas isso está em andamento. Este guia, por exemplo, será atualizado. Nossos documentos API também são ótimos para muitos exemplos minúsculos. Por fim, os tutoriais gerais do Python são muito úteis para começar com todos os lados não relacionados ao hardware do CircuitPython.

Como você acha que essa mudança afetará sua comunidade?

Eu acho que a mudança para o CircuitPython expandirá a comunidade Adafruit existente. Vai trazer mais iniciantes a bordo por causa de sua menor barreira à entrada. É uma combinação perfeita com a versatilidade incorporada de uma placa como o CircuitPlayground Express. Essa facilidade de uso também permitirá que mais pessoas contribuam de volta para nossa comunidade por meio de projetos e bibliotecas.

Os membros existentes da nossa comunidade continuarão a nos ver criando produtos e projetos inovadores. O CircuitPython é apenas um passo para melhorar a experiência de software e hardware de código aberto.

É também a primeira plataforma central que a Adafruit patrocinou (versus Arduino e Raspberry Pi, que têm equipes de desenvolvimento principais separadas). Isso nos dá a oportunidade de definir o tom para uma nova comunidade central de desenvolvimento, o que é muito empolgante. Todos os nossos novos projetos têm o Pacto de Contribuinte como o Código de Conduta, que é importante para ajudar a preservar a comunidade amigável, acolhedora e solidária da Adafruit à medida que expandimos o desenvolvimento de código aberto. A comunidade de idiomas Rust tem sido uma grande inspiração para como um projeto de código aberto pode ser executado bem. Emily Dunham tem várias boas conversas sobre eles também.

Espera-se que esse esforço leve a um conjunto mais diversificado de contribuidores para as bibliotecas CircuitPython, CircuitPython e Learn.

Ação

Deixar Um Comentário