def start_server(self): try: # start the server passing it the handle to PyMata and the command handler. scratch_http_server.start_server(self.firmata, self.scratch_command_handler) except Exception: logging.debug('Exception in s2a_fm.py %s' % str(Exception)) self.firmata.close() return except KeyboardInterrupt: # give control back to the shell that started us logging.info('s2a_fm.py: keyboard interrupt exception') self.firmata.close() return
def scratchat(chatserver): """ This is the "main" function of the program. It will instantiate the command handlers class. It will the start the HTTP server to communicate with Scratch 2.0 @return : This is the main loop and should never return """ # make sure we have a log directory and if not, create it. if not os.path.exists('log'): os.makedirs('log') # turn on logging logging.basicConfig(filename='./log/scratchat_debugging.log', filemode='w', level=logging.DEBUG) logging.info( 'scratchat Copyright(C) 2016 Antoine Choppin All Rights Reserved') print('scratchat Copyright(C) 2016 Antoine Choppin All Rights Reserved') # tcp server port - must match that in the .s2e descriptor file port = 50355 # instantiate the command handler scratch_command_handler = ScratchCommandHandlers(chatserver) try: scratch_http_server.start_server(port, scratch_command_handler) except Exception: logging.debug('Exception in scratchat.py %s' % str(Exception)) return except KeyboardInterrupt: # give control back to the shell that started us logging.info('scratchat.py: keyboard interrupt exception') return
def s2a_fm(): """ This is the "main" function of the program. It will instantiate PyMata for communication with an Arduino micro-controller and the command handlers class. It will the start the HTTP server to communicate with Scratch 2.0 @return : This is the main loop and should never return """ # total number of pins on arduino board total_pins_discovered = 0 # number of pins that are analog number_of_analog_pins_discovered = 0 # make sure we have a log directory and if not, create it. if not os.path.exists('log'): os.makedirs('log') # turn on logging logging.basicConfig(filename='./log/s2a_fm_debugging.log', filemode='w', level=logging.DEBUG) logging.info('s2a_fm version 1.5 Copyright(C) 2013-14 Alan Yorinks All Rights Reserved ') print 's2a_fm version 1.5 Copyright(C) 2013-14 Alan Yorinks All Rights Reserved ' # get the com_port from the command line or default if none given # if user specified the com port on the command line, use that when invoking PyMata, # else use '/dev/ttyACM0' if len(sys.argv) == 2: com_port = str(sys.argv[1]) else: com_port = '/dev/ttyACM0' logging.info('com port = %s' % com_port) try: # instantiate PyMata firmata = PyMata(com_port) # pragma: no cover except Exception: print 'Could not instantiate PyMata - is your Arduino plugged in?' logging.exception('Could not instantiate PyMata - is your Arduino plugged in?') logging.debug("Exiting s2a_fm") return # determine the total number of pins and the number of analog pins for the Arduino # get the arduino analog pin map # it will contain an entry for all the pins with non-analog set to firmata.IGNORE firmata.analog_mapping_query() capability_map = firmata.get_analog_mapping_request_results() firmata.capability_query() print "Please wait for Total Arduino Pin Discovery to complete. This can take up to 30 additional seconds." # count the pins for pin in capability_map: total_pins_discovered += 1 # non analog pins will be marked as IGNORE if pin != firmata.IGNORE: number_of_analog_pins_discovered += 1 # log the number of pins found logging.info('%d Total Pins and %d Analog Pins Found' % (total_pins_discovered, number_of_analog_pins_discovered)) # instantiate the command handler scratch_command_handler = ScratchCommandHandlers(firmata, com_port, total_pins_discovered, number_of_analog_pins_discovered) # wait for a maximum of 30 seconds to retrieve the Arduino capability query start_time = time.time() pin_capability = firmata.get_capability_query_results() while not pin_capability: if time.time() - start_time > 30: print '' print "Could not determine pin capability - exiting." firmata.close() # keep sending out a capability query until there is a response pin_capability = firmata.get_capability_query_results() time.sleep(.1) # we've got the capability, now build a dictionary with pin as the key and a list of all the capabilities # for the pin as the key's value pin_list = [] total_pins_discovered = 0 for entry in pin_capability: # bump up pin counter each time IGNORE is found if entry == firmata.IGNORE: scratch_command_handler.pin_map[total_pins_discovered] = pin_list total_pins_discovered += 1 pin_list = [] else: pin_list.append(entry) print "Arduino Total Pin Discovery completed in %d seconds" % (int(time.time() - start_time)) try: # start the server passing it the handle to PyMata and the command handler. scratch_http_server.start_server(firmata, scratch_command_handler) except Exception: logging.debug('Exception in s2a_fm.py %s' % str(Exception)) firmata.close() return except KeyboardInterrupt: # give control back to the shell that started us logging.info('s2a_fm.py: keyboard interrupt exception') firmata.close() return
def s2a_fm(): """ This is the "main" function of the program. It will instantiate PyMata for communication with an Arduino micro-controller and the command handlers class. It will the start the HTTP server to communicate with Scratch 2.0 @return : This is the main loop and should never return """ # total number of pins on arduino board total_pins_discovered = 0 # number of pins that are analog number_of_analog_pins_discovered = 0 # make sure we have a log directory and if not, create it. if not os.path.exists('log'): os.makedirs('log') # turn on logging logging.basicConfig(filename='./log/s2a_fm_debugging.log', filemode='w', level=logging.DEBUG) logging.info( 's2a_fm version 1.5 Copyright(C) 2013-14 Alan Yorinks All Rights Reserved ' ) print 's2a est la version entierement en francais de s2a_fm, une sorte de s2a_fr v1.7' print 's2a_fm version 1.5 Copyright(C) 2013-14 Alan Yorinks Tous droits reserves ' # print 'Traductions francaises : Sebastien Canet' # get the com_port from the command line or default if none given # if user specified the com port on the command line, use that when invoking PyMata, # else use '/dev/ttyACM0' if len(sys.argv) == 2: com_port = str(sys.argv[1]) else: com_port = '/dev/ttyACM0' logging.info('com port = %s' % com_port) try: # instantiate PyMata firmata = PyMata(com_port) # pragma: no cover except Exception: print 'Impossible de communiquer avec PyMata - votre carte Arduino est bien connectee ??' logging.exception( 'Could not instantiate PyMata - is your Arduino plugged in?') logging.debug("Exiting s2a_fm") return # determine the total number of pins and the number of analog pins for the Arduino # get the arduino analog pin map # it will contain an entry for all the pins with non-analog set to firmata.IGNORE firmata.analog_mapping_query() capability_map = firmata.get_analog_mapping_request_results() firmata.capability_query() print "Merci de patienter pendant la detection du nombre de pins de votre Arduino. Cela peut prendre pres de 30s de plus." # count the pins for pin in capability_map: total_pins_discovered += 1 # non analog pins will be marked as IGNORE if pin != firmata.IGNORE: number_of_analog_pins_discovered += 1 # log the number of pins found logging.info('%d Total Pins and %d Analog Pins Found' % (total_pins_discovered, number_of_analog_pins_discovered)) # instantiate the command handler scratch_command_handler = ScratchCommandHandlers( firmata, com_port, total_pins_discovered, number_of_analog_pins_discovered) # wait for a maximum of 30 seconds to retrieve the Arduino capability query start_time = time.time() pin_capability = firmata.get_capability_query_results() while not pin_capability: if time.time() - start_time > 30: print '' print "Impossible de determiner le nombre de pins - sortie du script." firmata.close() # keep sending out a capability query until there is a response pin_capability = firmata.get_capability_query_results() time.sleep(.1) # we've got the capability, now build a dictionary with pin as the key and a list of all the capabilities # for the pin as the key's value pin_list = [] total_pins_discovered = 0 for entry in pin_capability: # bump up pin counter each time IGNORE is found if entry == firmata.IGNORE: scratch_command_handler.pin_map[total_pins_discovered] = pin_list total_pins_discovered += 1 pin_list = [] else: pin_list.append(entry) print "Detection des pins de la carte Arduino faite en %d secondes" % ( int(time.time() - start_time)) try: # lance un script pour automatiser l'ouverture de Scratch pendant que le serveur se met en route # il est separe pour permettre aux utilisateurs de le modifier en direct, dans le batch, ca simplifie # os.startfile('Scratch2.bat') # start the server passing it the handle to PyMata and the command handler. scratch_http_server.start_server(firmata, scratch_command_handler) except Exception: logging.debug('Erreur dans s2a_fm.py %s' % str(Exception)) firmata.close() return except KeyboardInterrupt: # give control back to the shell that started us logging.info('s2a_fm.py: keyboard interrupt exception') firmata.close() return
def s2a_fm(): """ This is the "main" function of the program. It will instantiate PyMata for communication with an Arduino micro-controller and the command handlers class. It will the start the HTTP server to communicate with Scratch 2.0 @return : This is the main loop and should never return """ global s2a_fm_status # total number of pins on arduino board total_pins_discovered = 0 # number of pins that are analog number_of_analog_pins_discovered = 0 # Ethernet/WiFi autodetect autodetect = 0 print 's2a_fm version 1.5 Copyright(C) 2013-14 Alan Yorinks All Rights Reserved ' # get the com_port from the command line or default if none given # if user specified the com port on the command line, use that when invoking PyMata, # else use '/dev/ttyACM0' projectName = '86Hexapodtest' com_port = '/dev/ttyACM0' ui_server_port = 8386 if len(sys.argv) == 2: if str(sys.argv[1]) == 'autodetect': autodetect = 1 else: com_port = str(sys.argv[1]) elif len(sys.argv) == 3: if str(sys.argv[1]).find('com') == 0: com_port = str(sys.argv[1]) ui_server_port = int(sys.argv[2]) elif str(sys.argv[1]) == 'autodetect': autodetect = 1 ui_server_port = int(sys.argv[2]) else: host_ip = str(sys.argv[1]) host_port = int(sys.argv[2]) elif len(sys.argv) == 4: host_ip = str(sys.argv[1]) host_port = int(sys.argv[2]) ui_server_port = int(sys.argv[3]) try: # instantiate PyMata if autodetect == 1: firmata = PyMata(host_port=2000, ui_server_port=ui_server_port, projectName=projectName, autodetect=autodetect) elif str(sys.argv[1]).find('com') == 0: firmata = PyMata(port_id=com_port, ui_server_port=ui_server_port) # pragma: no cover elif len(sys.argv) == 3 or len(sys.argv) == 4: firmata = PyMata(host_ip=host_ip, host_port=host_port, ui_server_port=ui_server_port) # pragma: no cover except Exception: print 'Could not instantiate PyMata - is your Arduino plugged in?' return firmata.set_s2a_fm_status(5) # determine the total number of pins and the number of analog pins for the Arduino # get the arduino analog pin map # it will contain an entry for all the pins with non-analog set to firmata.IGNORE # firmata.analog_mapping_query() # time.sleep(.1) capability_map = firmata.get_analog_mapping_request_results() firmata.capability_query() print "Please wait for Total Arduino Pin Discovery to complete. This can take up to 30 additional seconds." # count the pins for pin in capability_map: total_pins_discovered += 1 # non analog pins will be marked as IGNORE if pin != firmata.IGNORE: number_of_analog_pins_discovered += 1 # instantiate the command handler scratch_command_handler = ScratchCommandHandlers( firmata, com_port, total_pins_discovered, number_of_analog_pins_discovered) firmata.set_s2a_fm_status(6) # wait for a maximum of 30 seconds to retrieve the Arduino capability query start_time = time.time() pin_capability = firmata.get_capability_query_results() while not pin_capability: firmata.set_s2a_fm_status(7) if time.time() - start_time > 30: firmata.set_s2a_fm_status(99) firmata.set_error_no(4) print '' print "Could not determine pin capability - exiting." firmata.send_error_message() firmata.close(True) return # keep sending out a capability query until there is a response pin_capability = firmata.get_capability_query_results() time.sleep(.1) firmata.set_s2a_fm_status(8) # we've got the capability, now build a dictionary with pin as the key and a list of all the capabilities # for the pin as the key's value pin_list = [] total_pins_discovered = 0 for entry in pin_capability: # bump up pin counter each time IGNORE is found if entry == firmata.IGNORE: scratch_command_handler.pin_map[total_pins_discovered] = pin_list total_pins_discovered += 1 pin_list = [] else: pin_list.append(entry) print "Arduino Total Pin Discovery completed in %d seconds" % ( int(time.time() - start_time)) firmata.set_s2a_fm_status(9) thread.start_new_thread(firmata.send_command_check_active, (firmata, )) try: # start the server passing it the handle to PyMata and the command handler. scratch_http_server.start_server(firmata, scratch_command_handler) except Exception: firmata.set_error_no(5) firmata.send_error_message() firmata.close(True) return except KeyboardInterrupt: # give control back to the shell that started us firmata.set_error_no(99) firmata.close(True) return
def s2a_fm(): """ This is the "main" function of the program. It will instantiate PyMata for communication with an Arduino micro-controller and the command handlers class. It will the start the HTTP server to communicate with Scratch 2.0 @return : This is the main loop and should never return """ # total number of pins on arduino board total_pins_discovered = 0 # number of pins that are analog number_of_analog_pins_discovered = 0 # make sure we have a log directory and if not, create it. if not os.path.exists('log'): os.makedirs('log') # turn on logging logging.basicConfig(filename='./log/s2a_fm_debugging.log', filemode='w', level=logging.DEBUG) logging.info( 's2a_fm version 1.5 Copyright(C) 2013-14 Alan Yorinks All Rights Reserved ' ) print 's2a_fm version 1.5 Copyright(C) 2013-14 Alan Yorinks All Rights Reserved ' # get the com_port from the command line or default if none given # if user specified the com port on the command line, use that when invoking PyMata, # else use '/dev/ttyACM0' if len(sys.argv) == 2: com_port = str(sys.argv[1]) else: com_port = '/dev/ttyACM0' logging.info('com port = %s' % com_port) try: # instantiate PyMata firmata = PyMata(com_port) # pragma: no cover except Exception: print 'Could not instantiate PyMata - is your Arduino plugged in?' logging.exception( 'Could not instantiate PyMata - is your Arduino plugged in?') logging.debug("Exiting s2a_fm") return # determine the total number of pins and the number of analog pins for the Arduino # get the arduino analog pin map # it will contain an entry for all the pins with non-analog set to firmata.IGNORE firmata.analog_mapping_query() capability_map = firmata.get_analog_mapping_request_results() firmata.capability_query() print "Please wait for Total Arduino Pin Discovery to complete. This can take up to 30 additional seconds." # count the pins for pin in capability_map: total_pins_discovered += 1 # non analog pins will be marked as IGNORE if pin != firmata.IGNORE: number_of_analog_pins_discovered += 1 # log the number of pins found logging.info('%d Total Pins and %d Analog Pins Found' % (total_pins_discovered, number_of_analog_pins_discovered)) # instantiate the command handler scratch_command_handler = ScratchCommandHandlers( firmata, com_port, total_pins_discovered, number_of_analog_pins_discovered) # wait for a maximum of 30 seconds to retrieve the Arduino capability query start_time = time.time() pin_capability = firmata.get_capability_query_results() while not pin_capability: if time.time() - start_time > 30: print '' print "Could not determine pin capability - exiting." firmata.close() # keep sending out a capability query until there is a response pin_capability = firmata.get_capability_query_results() time.sleep(.1) # we've got the capability, now build a dictionary with pin as the key and a list of all the capabilities # for the pin as the key's value pin_list = [] total_pins_discovered = 0 for entry in pin_capability: # bump up pin counter each time IGNORE is found if entry == firmata.IGNORE: scratch_command_handler.pin_map[total_pins_discovered] = pin_list total_pins_discovered += 1 pin_list = [] else: pin_list.append(entry) print "Arduino Total Pin Discovery completed in %d seconds" % ( int(time.time() - start_time)) try: # start the server passing it the handle to PyMata and the command handler. scratch_http_server.start_server(firmata, scratch_command_handler) except Exception: logging.debug('Exception in s2a_fm.py %s' % str(Exception)) firmata.close() return except KeyboardInterrupt: # give control back to the shell that started us logging.info('s2a_fm.py: keyboard interrupt exception') firmata.close() return
def s2a_fm(): """ This is the "main" function of the program. It will instantiate PyMata for communication with an Arduino micro-controller and the command handlers class. It will the start the HTTP server to communicate with Scratch 2.0 @return : This is the main loop and should never return """ # total number of pins on arduino board total_pins_discovered = 0 # number of pins that are analog number_of_analog_pins_discovered = 0 # make sure we have a log directory and if not, create it. if not os.path.exists('log'): os.makedirs('log') # turn on logging logging.basicConfig(filename='./log/s2a_fm_debugging.log', filemode='w', level=logging.DEBUG) logging.info('s2a_fm version 1.0 Copyright(C) 2013 Alan Yorinks All Rights Reserved ') print 's2a_fm version 1.0 Copyright(C) 2013 Alan Yorinks All Rights Reserved ' # get the com_port from the command line or default if none given # if user specified the com port on the command line, use that when invoking PyMata, # else use '/dev/ttyACM0' if len(sys.argv) == 2: com_port= str(sys.argv[1]) else: com_port = '/dev/ttyACM0' logging.info('com port = %s' % com_port) try: # instantiate PyMata firmata = PyMata(com_port) # pragma: no cover except: Exception print 'Could not instantiate PyMata - is your Arduino plugged in?' logging.exception('Could not instantiate PyMata - is your Arduino plugged in?') logging.debug("Exiting s2a_fm") return # determine the total number of pins and the number of analog pins for the Arduino # get the arduino analog pin map # it will contain an entry for all the pins with non-analog set to firmata.IGNORE firmata.analog_mapping_query() capability_map = firmata.get_analog_mapping_request_results() # count the pins for pin in capability_map: total_pins_discovered += 1 # non analog pins will be marked as IGNORE if pin != firmata.IGNORE: number_of_analog_pins_discovered += 1 # log the number of pins found logging.info('%d Total Pins and %d Analog Pins Found' % (total_pins_discovered, number_of_analog_pins_discovered)) # instantiate the command handler scratch_command_handler = ScratchCommandHandlers(firmata, com_port, total_pins_discovered, number_of_analog_pins_discovered) try: # start the server passing it the handle to PyMata and the command handler. scratch_http_server.start_server(firmata, scratch_command_handler) except Exception: logging.debug('Exception in s2a_fm.py %s' % str(Exception)) firmata.close() return except KeyboardInterrupt: # give control back to the shell that started us logging.info('s2a_fm.py: keyboard interrupt exception') firmata.close() return
for entry in pin_capability: # bump up pin counter each time IGNORE is found if entry == firmata.IGNORE: scratch_command_handler.pin_map[total_pins_discovered] = pin_list total_pins_discovered += 1 pin_list = [] else: pin_list.append(entry) print "Arduino Total Pin Discovery completed in %d seconds" % ( int(time.time() - start_time)) try: # start the server passing it the handle to PyMata and the command handler. scratch_http_server.start_server(firmata, scratch_command_handler) except Exception: logging.debug('Exception in s2a_fm.py %s' % str(Exception)) firmata.close() return except KeyboardInterrupt: # give control back to the shell that started us logging.info('s2a_fm.py: keyboard interrupt exception') firmata.close() return if __name__ == "__main__": s2a_fm()