2013-01-06 37 views
16

का उपयोग करने के लिए रास्पबेरी पीई पर टॉरनाडो, जो कि मैं प्राप्त करने की उम्मीद कर रहा हूं वह एक Arduino को Raspberry Pi के माध्यम से नियंत्रित करने के लिए कैनवास आधारित वेब इंटरफ़ेस है। use case यह है कि कोई उपयोगकर्ता raspberrypi:8080 पर जाता है जो एक कैनवास प्रदर्शित करता है। फिर स्लाइडर को ले जाने पर, एक वेबसाकेट संदेश रास्पबेरी पीआई पर Tornado सर्वर पर भेजा जाता है। टॉरनाडो फिर Arduino को एक धारावाहिक संदेश भेजता है जो LED के मान को बदलता है। अब तक इतना अच्छा है, मैं डेवलपर की मदद से इसे डेवलपर, Raspberry Pi Android HTML5 Realtime Servo Control द्वारा करने में सक्षम हूं।वेबसाइकिलों के साथ-साथ मॉनिटर सीरियल पोर्ट Arduino संचार

हालांकि, संचार रास्पबेरी पी से Arduino तक केवल एक ही रास्ता है। मैं टोरनाडो को सीरियल पोर्ट की निगरानी करने के लिए फ्रंट सेंसर पर किसी भी सेंसर डेटा को वापस लेना चाहता हूं। यहां वह जगह है जहां मैं आगे बढ़ने के बारे में अनिश्चित हूं। मैं Node.js का उपयोग करके इस तरह कुछ हासिल करने में सक्षम था, जो दोनों वेबसाईट संदेशों के साथ-साथ धारावाहिक संदेशों को अतुल्यकालिक रूप से मॉनीटर करता है।

क्या एक एसिंक्रोनस प्रक्रिया उत्पन्न की जानी चाहिए जो लगातार बंदरगाह पर नज़र रखता है? मैंने इस तरह के समाधान के लिए कुछ विकल्प देखे हैं।

  1. कुछ लोग tornado.gen.Task का सुझाव देते हैं, लेकिन एकल HTTP अनुरोधों के लिए, निरंतर धारावाहिक डेटा के लिए नहीं।
  2. tornado.ioloop.PeriodicCallback जो मैं हर मिलीसेकंद के सीरियल डेटा की जांच करने के लिए सेट अप कर सकता था, लेकिन यह बहुत अधिक ओवरहेड की तरह लगता है।
  3. मैंने Swirl जैसे अलग-अलग टूल भी देखे हैं।

(घुमाव it's Github repo के अनुसार पुरानी है) या मैं एक अलग Python आवेदन जो धारावाहिक की निगरानी करता है और फिर कुछ पर तूफान आवेदन तो वह ऐसा समझ सकते हैं करने के लिए संचार सेट करना चाहिए?

एक websocket client
  • ZeroMQ (कार्य उदाहरण: pyzmq/examples/eventloop/web.py) का उपयोग कर
    1. WebSocket संदेशों

    तो वहाँ बहुत सारे विकल्प ... क्या कुछ सुझाव दिए गए हैं कर रहे हैं और उपर्युक्त विकल्पों में से किसी एक को आज़माने या टालने के कुछ कारण?

    import tornado.httpserver 
    import tornado.ioloop 
    import tornado.options 
    import tornado.web 
    import tornado.websocket 
    
    from tornado.options import define, options 
    define("port", default=8080, help="run on the given port", type=int) 
    
    class IndexHandler(tornado.web.RequestHandler): 
        def get(self): 
         self.render('index.html') 
    
    class WebSocketHandler(tornado.websocket.WebSocketHandler): 
        def open(self): 
         print 'new connection' 
         self.write_message("connected") 
    
        def on_message(self, message): 
         print 'message received %s' % message 
         self.write_message('message received %s' % message) 
    
        def on_close(self): 
         print 'connection closed' 
    
    if __name__ == "__main__": 
        tornado.options.parse_command_line() 
        app = tornado.web.Application(
         handlers=[ 
          (r"/", IndexHandler), 
          (r"/ws", WebSocketHandler) 
         ] 
        ) 
        httpServer = tornado.httpserver.HTTPServer(app) 
        httpServer.listen(options.port) 
        print "Listening on port:", options.port 
        tornado.ioloop.IOLoop.instance().start() 
    
  • +0

    +1 अच्छा विचार के लिए! – Rafa

    उत्तर

    10

    मैंने एक समाधान निकाला है जिसमें पायथन की मल्टीप्रोसेसिंग लाइब्रेरी का उपयोग करना शामिल है।मैं सिर्फ इसके बारे में एक विस्तृत ब्लॉग पोस्ट लिखा:

    Raspberry Pi + Tornado + Arduino

    आशा दूसरों इसे उपयोगी पाते ...

    +1

    आपका लिंक मर चुका है:/ – Outpox

    +0

    यहां एक archive.org कॉपी है http://web.archive.org/web/20160521032515/http://niltoid.com/blog/raspberry-pi-arduino-tornado/ –

    0

    यहाँ मेरी 2 सेंट हैं:

    यहाँ मैं क्या है और करने के लिए धारावाहिक निगरानी जोड़ने की आवश्यकता है। मैं पाइथन -> websockets-client मार्ग के लिए वकालत करता हूं। टोरनाडो सर्वर सॉफ़्टवेयर वेब क्लाइंट अनुरोधों को संभालने के लिए बनाया और ट्यून किया गया है। इसे यह काम करने दो। इसे किसी अन्य भूमिका (जैसे स्थानीय हार्डवेयर की निगरानी करना) में शूहोर्न करने का कोई भी प्रयास किसी ऐसे काम से अधिक ओवरहेड का कारण बन रहा है जो (ए) ऐसा काम करने के लिए डिज़ाइन किया गया है (जैसे सी/सी ++ प्रोग्राम) या (बी) हैंडल करने के लिए पर्याप्त लचीला काफी कम ओवरहेड (एक पायथन स्क्रिप्ट की तरह) के साथ ऐसा एक कार्य।

    प्रासंगिक अनुभव: रास्पबेरी पी और आर्डिनो दोनों के लिए प्रोग्राम किया है। स्थानीय रोबोटिक्स क्लब में अधिकारी।

    +0

    सुझाव के लिए धन्यवाद। मैं मानता हूं कि धारावाहिक कॉम को एक अलग कार्यक्रम में रखना सर्वोत्तम है। यदि आप उत्सुक हैं तो मेरा अंतिम समाधान उत्तर में देखें। – niltoid