Más allá de StandardFirmata - agregar nuevos dispositivo soporte (6 / 10 paso)

Paso 6: Aplicación de los comandos de API PyMata y métodos de informe

MENSAJES de comandos - pymata.py

Luego codificamos los métodos de PyMata API para los tres sub-comandos de motor paso a paso y un método de API para recuperar el número de versión divulgada. Todos los cambios de código para la API se hacen al pymata.py. La primera de tres métodos, stepper_config, stepper_step y stepper_request_library_version traducen el comando en un comando de SysEx con formato correcto que luego es enviado a Arduino. El último método, get_stepper_version, no lleva a ningún mensajes SysEx, pero simplemente devuelve el resultado de una solicitud de versión anterior.

 def stepper_config(self, steps_per_revolution, stepper_pins): """ Configure stepper motor prior to operation. steps_per_revolution: number of steps per motor revolution stepper_pins: a list of control pin numbers - either 4 or 2 """ data = [self.STEPPER_CONFIGURE, steps_per_revolution & 0x7f, steps_per_revolution >> 7] for pin in range(len(stepper_pins)): data.append(stepper_pins[pin]) self._command_handler.send_sysex(self._command_handler.STEPPER_DATA, data) 
 def stepper_step(self, motor_speed, number_of_steps): """ Move a stepper motor for the number of steps at the specified speed motor_speed: 21 bits of data to set motor speed number_of_steps: 14 bits for number of steps & direction positive is forward, negative is reverse """ if number_of_steps > 0: direction = 1 else: direction = 0 abs_number_of_steps = abs(number_of_steps) data = [self.STEPPER_STEP, motor_speed & 0x7f, (motor_speed >> 7) & 0x7f, motor_speed >> 14, abs_number_of_steps & 0x7f, abs_number_of_steps >> 7, direction] self._command_handler.send_sysex(self._command_handler.STEPPER_DATA, data) 
 def stepper_request_library_version(self): """ Request the stepper library version from the Arduino. To retrieve the version after this command is called, call get_stepper_version """ data = [self.STEPPER_LIBRARY_VERSION] self._command_handler.send_sysex(self._command_handler.STEPPER_DATA, data) 

Finalmente implementamos get_stepper_library_version:

 def get_stepper_version(self, timeout=20): """ timeout: specify a time to allow arduino to process and return a version the stepper version number if it was set. """ # get current time start_time = time.time() 
 # wait for version to come from the Arduino 
 while self._command_handler.stepper_library_version <= 0: if time.time() - start_time > timeout: print "Stepper Library Version Request timed-out. Did you send a stepper_request_library_version command?" return else: pass return self._command_handler.stepper_library_version 

Esto completa los cambios a pymata.py. Cierre y guarde pymata.py.


MENSAJES de informe - pymata_command_handler.py

Ahora añadimos el método del controlador informe a pymata_command_handler.py, para que puedan recibir y procesar informes de versión de biblioteca paso a paso. Observe que este método permite volver a montar los datos de la el mensaje SysEx y tiendas en una variable interna llamada stepper_library_version.

 def stepper_version_response(self, data): """ This method handles a stepper library version message sent from the Arduino data - two 7 bit bytes that contain the library version number """ self.stepper_library_version = (data[0] & 0x7f) + (data[1] << 7) 

Por último, tenemos que actualizar la tabla de command_dispatch para procesar el recibo de la respuesta de versión paso a paso. Añadir una nueva entrada a la parte inferior de la tabla existente para STEPPER_DATA como se muestra a continuación. Cada entrada en la tabla de command_dispatch consiste en el comando de SysEx, el nombre del método de manejo, y el número de valores de bit 7. Los valores de 7 bits se vuelve a montar e interpretados según las especificaciones de los formatos de mensaje SysEx que definimos anteriormente.

 def run(self): """ This method starts the thread that continuously runs to receive and interpret messages coming from Firmata. This must be the last method in this file It also checks the deque for messages to be sent to Firmata. """ # To add a command to the command dispatch table, append here. self.command_dispatch.update({self.REPORT_VERSION: [self.report_version, 2]}) self.command_dispatch.update({self.REPORT_FIRMWARE: [self.report_firmware, 1]}) self.command_dispatch.update({self.ANALOG_MESSAGE: [self.analog_message, 2]}) self.command_dispatch.update({self.DIGITAL_MESSAGE: [self.digital_message, 2]}) self.command_dispatch.update({self.ENCODER_DATA: [self.encoder_data, 3]}) self.command_dispatch.update({self.SONAR_DATA: [self.sonar_data, 3]}) self.command_dispatch.update({self.STRING_DATA: [self._string_data, 2]}) self.command_dispatch.update({self.I2C_REPLY: [self.i2c_reply, 2]}) self.command_dispatch.update({self.CAPABILITY_RESPONSE: [self.capability_response, 2]}) self.command_dispatch.update({self.PIN_STATE_RESPONSE: [self.pin_state_response, 2]}) self.command_dispatch.update({self.ANALOG_MAPPING_RESPONSE: [self.analog_mapping_response, 2]}) self.command_dispatch.update({self.STEPPER_DATA: [self.stepper_version_response, 2]}) 

La mesa de despacho de comando se define como un mapa en pymata_command_handler.py. Estos comentarios del código explican su uso y cómo agregar nuevos comandos a él.

 # This is a map that allows the look up of command handler methods using a command as the key. # This is populated in the run method after the python interpreter "sees" all of the command handler method defines (python does not have forward referencing) 
 # The "key" is the command, and the value contains is a list containing the method name and the number of # parameter bytes that the method will require to process the message (in some cases the value is unused) command_dispatch = {} 

Guarde y cierre pymata_command_handler.py. Los cambios de cliente ahora están completados.

Artículos Relacionados

Agregar nuevo suelo a la ventana del usb

Agregar nuevo suelo a la ventana del usb

abrir la memoria USBy copiar este código en un bloc de notas[{BE098140-A513-11D0-A3A4-00C04FD706EC}]IconArea_Image =img.jpgIconArea_Text = 0 × 000000Guarde el archivo como desktop.iniSustituir ** img.jpg ** con el nombre del archivo de imagenNota: co
¿LEGO NXT el control con wiimote

¿LEGO NXT el control con wiimote

siempre quiere construir su propio vehículo RC? Ahora usted puede. En control de su diseño y fácil de usar Legos, por ser Legos. Todo lo que necesitas es un Lego NXT, un ordenador con un software de control y Bluetooth dongleTengo 17 años.Paso 1: mat
Mi 1 º dispositivo de Iot con GeekNesia + Arduino Uno + Ethernet Shield y DHT21 via PubSub método

Mi 1 º dispositivo de Iot con GeekNesia + Arduino Uno + Ethernet Shield y DHT21 via PubSub método

Geeknesia es una plataforma de Internet de las cosas, como ThingSpeak pero es :) de Indonesia. GeekNesia todavía Beta espero que habrá algún otro rasgo bueno pronto. Usar Arduino uno y shield Ethernet para enviar datos de DHT21 (Humadity y temperatur
Cómo obtener juegos gratis en Samsung restaurar para VM

Cómo obtener juegos gratis en Samsung restaurar para VM

** este instructable es introducido en el desafío de "hackear", por favor voten por mí:) **Hace unos meses me compré mi primer teléfono, el samsung restore para móvil virgen. Después de unos días de descubrir el teléfono decidí que necesitaba al
Discurso controlado Quadropod

Discurso controlado Quadropod

Este es mi primer post en Instructables y estoy super emocionada de compartir mi conocimiento!Mi post de robot original está aquí: Spryo SpoonTail que es sólo mi robot que muestra algunos trucos pero con un control anclado.En este Instructable voy a
Configurar tu PSP como Monitor secundario

Configurar tu PSP como Monitor secundario

antes de empezar, este es mi primer instructivo, por lo que cualquier información sería genial, gracias.Este instructable le mostrará cómo configurar tu PSP para ser utilizado como un segundo Monitor en tu PC. Esto puede ser útil de muchas maneras, p
¿Cómo usar un Wiimote como Mouse de su computadora

¿Cómo usar un Wiimote como Mouse de su computadora

alguna vez se preguntó qué cosas interesantes se puede hacer con un Wiimote? Si es así, este es sin duda donde debe iniciar-como un ratón!Paso 1: Paso 1: materiales1. un Wiimote (por supuesto)2. WiiMotionPlus (realmente es construido en algunos nuevo
¿Cómo configurar Chromecast con el IPhone?

¿Cómo configurar Chromecast con el IPhone?

Este conjunto de instrucciones le guiará para configurar y utilizar su nuevo chromecast usando tu iPhone.Referencia - fotosGoogle - www.google.com/chromecastTodas las fotos son tomadas de la fuente de chromecast oficial de googlePaso 1: ¿Qué necesita
Elegante casa parte 1: registrador de temperatura de fácil nube habilitado.

Elegante casa parte 1: registrador de temperatura de fácil nube habilitado.

Siempre estuve tentado a tener una "casa inteligente". Gracias a Instructables y Intel que me envió el kit compuesto por Edison Intel con kit de arranque placa Arduino y Grove finalmente tengo la oportunidad de perseguir este sueño. Este es el p
Elegante hogar parte 2: relé de conducción a través de la nube.

Elegante hogar parte 2: relé de conducción a través de la nube.

Por favor familiarizarse y tratar de hacer mi primer instructivo donde te muestro cómo registrar la temperatura de su casa en nube de intel con Edison. Por favor siga los pasos 2-3 lo anterior instructable para configurar su edison y su tablero de in
Cómo agregar un circuito a tu coche

Cómo agregar un circuito a tu coche

Tal vez usted está también en una situación donde usted quiere alguna funcionalidad extra en su coche.Ya sea un extra de salida, una puerta central de bloqueo de sistema o una cafetera integrada.En este instructable quiero mostrarte cómo agregar corr
Como prototipo de un dispositivo lucha de postura para los pies separado

Como prototipo de un dispositivo lucha de postura para los pies separado

Ahora, justo cuando pensabas que tu lucha postura es buena, el entrenador le encendió por las noticias de última hora, su pésimo! Y, arriesgando su posición se arriesga a la Fundación para la luchas todas las jugadas. Experimentado los combatientes -
IoT DIY dispositivos de conexión a Internet con pfodApp

IoT DIY dispositivos de conexión a Internet con pfodApp

Cómo conectarse en casa y a usar la misma conexiónEste instructabe incluye cómo obtener su pfodDevice WiFi, IoT, conectado a Internet. También muestra cómo el pfodApp soluciona el problema de no poder conectarse al dispositivo local a través de Inter
Lucha contra postura Coaching dispositivo (pivote) - previene el pie de pivote Slacking por los ladridos

Lucha contra postura Coaching dispositivo (pivote) - previene el pie de pivote Slacking por los ladridos

Lucha contra principiantes a través de los veteranos puede ahora entrenar con un entrenador incansable que está con usted cada paso del camino, para mejorar la Fundación más básica y vital para ganar una pelea, la postura básica. Enfrentémoslo, sin a