`
haoningabc
  • 浏览: 1469909 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

tornado做树莓派车的遥控器

阅读更多
最近在做ios的一个东西,后端用的websocket



今天把树莓派的小车又翻出来了
使用tornode做了个遥控器,python的websocket和python的gpio,天生的好基友啊

调速度
http://bbs.elecfans.com/jishu_439995_1_1.html

http://www.geekfan.net/9926/
这个time.sleep(delay)来控制
比如
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)

enable_pin = 18
coil_A_1_pin = 4
coil_A_2_pin = 17
coil_B_1_pin = 23
coil_B_2_pin = 24

GPIO.setup(enable_pin, GPIO.OUT)
GPIO.setup(coil_A_1_pin, GPIO.OUT)
GPIO.setup(coil_A_2_pin, GPIO.OUT)
GPIO.setup(coil_B_1_pin, GPIO.OUT)
GPIO.setup(coil_B_2_pin, GPIO.OUT)

GPIO.output(enable_pin, 1)

def forward(delay, steps):  
  for i in range(0, steps):
    setStep(1, 0, 1, 0)
    time.sleep(delay)
    setStep(0, 1, 1, 0)
    time.sleep(delay)
    setStep(0, 1, 0, 1)
    time.sleep(delay)
    setStep(1, 0, 0, 1)
    time.sleep(delay)

def backwards(delay, steps):  
  for i in range(0, steps):
    setStep(1, 0, 0, 1)
    time.sleep(delay)
    setStep(0, 1, 0, 1)
    time.sleep(delay)
    setStep(0, 1, 1, 0)
    time.sleep(delay)
    setStep(1, 0, 1, 0)
    time.sleep(delay)

def setStep(w1, w2, w3, w4):
  GPIO.output(coil_A_1_pin, w1)
  GPIO.output(coil_A_2_pin, w2)
  GPIO.output(coil_B_1_pin, w3)
  GPIO.output(coil_B_2_pin, w4)

while True:
  delay = raw_input("Delay between steps (milliseconds)?")
  steps = raw_input("How many steps forward? ")
  forward(int(delay) / 1000.0, int(steps))
  steps = raw_input("How many steps backwards? ")
  backwards(int(delay) / 1000.0, int(steps))


tornode参看http://haoningabc.iteye.com/blog/2164973


apt-get install python-virtualenv
virtualenv tonado
. tornado/bin/activate
apt-get install python-dev
wget http://jaist.dl.sourceforge.net/project/raspberry-gpio-python/RPi.GPIO-0.5.8.tar.gz
2016年2月15日变为
wget http://jaist.dl.sourceforge.net/project/raspberry-gpio-python/RPi.GPIO-0.6.1.tar.gz
python setup.py install

root@raspberrypi:~# cat a.py 
#!/usr/bin/env python
import RPi.GPIO as GPIO
import curses
import time
from curses import wrapper
GPIO.setmode(GPIO.BCM)
GPIO.setup(27,GPIO.OUT)
GPIO.setup(18,GPIO.OUT)
GPIO.setup(22,GPIO.OUT)
GPIO.setup(23,GPIO.OUT)

stdscr=curses.initscr()
stdscr.clear()
while True:
    ch=stdscr.getkey()
    #time.sleep(0.001)
#调速度是这里吧,没测试
    if ch =='s':
        curses.endwin()
        GPIO.output(27,False)
        GPIO.output(18,False)
        GPIO.output(22,False)
        GPIO.output(23,False)
        break
    if ch == 'w':
        GPIO.output(27,False)
        GPIO.output(18,True)
        GPIO.output(22,False)
        GPIO.output(23,True)
    if ch == 'x':
        GPIO.output(27,True)
        GPIO.output(18,False)
        GPIO.output(22,True)
        GPIO.output(23,False)
    if ch == 'a':
        GPIO.output(27,False)
        GPIO.output(18,True)
        GPIO.output(22,False)
        GPIO.output(23,False)
    if ch == 'd':
        GPIO.output(27,False)
        GPIO.output(18,False)
        GPIO.output(22,False)
        GPIO.output(23,True)
root@raspberrypi:~# 

这个ssh作为控制方向
http://blog.csdn.net/xukai871105/article/details/12684617
http://raspberry-gpio-python.googlecode.com
#----------------------------------------------------------------------------
tonardo的websocket作为遥控器
python aa.py
#!/usr/bin/python
#coding:utf-8
import os.path

import tornado.httpserver
import tornado.web
import tornado.ioloop
import tornado.options
import tornado.httpclient
import tornado.websocket

import json

import RPi.GPIO as GPIO
import time
#GPIO.setwarnings(False) 
#GPIO.setmode(GPIO.BCM)
#GPIO.setup(17,GPIO.OUT)
#GPIO.setup(18,GPIO.OUT)
#GPIO.setup(22,GPIO.OUT)
#GPIO.setup(23,GPIO.OUT)



class IndexHandler(tornado.web.RequestHandler):
    def get(self):
      self.render("index.html")

class SocketHandler(tornado.websocket.WebSocketHandler):
    """docstring for SocketHandler"""
    clients = set()

    @staticmethod
    def send_to_all(message):
        for c in SocketHandler.clients:
            c.write_message(json.dumps(message))

    def open(self):
#        GPIO.setwarnings(False) 
        GPIO.setmode(GPIO.BCM)
        GPIO.setup(17,GPIO.OUT)
        GPIO.setup(18,GPIO.OUT)
        GPIO.setup(22,GPIO.OUT)
        GPIO.setup(23,GPIO.OUT)
        self.write_message(json.dumps({
        'type': 'sys',
        'message': 'Welcome to WebSocket',
        }))
        SocketHandler.send_to_all({
        'type': 'sys',
        'message': str(id(self)) + ' has joined',
        })
        SocketHandler.clients.add(self)

    def on_close(self):
        SocketHandler.clients.remove(self)
        SocketHandler.send_to_all({
        'type': 'sys',
        'message': str(id(self)) + ' has left',
        })

    def on_message(self, message):
        if(message == 'w'):
            GPIO.output(17,False) 
            GPIO.output(18,True)
            GPIO.output(22,False)
            GPIO.output(23,True)
        elif(message == 'a'):
            GPIO.output(17,False)
            GPIO.output(18,True)
            GPIO.output(22,False)
            GPIO.output(23,False)
        elif(message == 'd'):
            GPIO.output(17,False)
            GPIO.output(18,False)
            GPIO.output(22,False)
            GPIO.output(23,True)
        elif(message == 's'):
            GPIO.output(17,True)
            GPIO.output(18,False)
            GPIO.output(22,True)
            GPIO.output(23,False)
        else:
            GPIO.output(17,False)
            GPIO.output(18,False)
            GPIO.output(22,False)
            GPIO.output(23,False)
            SocketHandler.send_to_all({
            'type': 'user',
            'id': id(self),
            'message': message,
            })
    
##MAIN
if __name__ == '__main__':
    app = tornado.web.Application(
      handlers=[
        (r"/", IndexHandler),
        (r"/chat", SocketHandler)
      ],
    debug = True,
    #  template_path = os.path.join(os.path.dirname(__file__), "templates"),
    #     static_path = os.path.join(os.path.dirname(__file__), "static")
    )
    app.listen(8000)
    tornado.ioloop.IOLoop.instance().start()

客户端
index.html
<html>
<head>
<script type="text/javascript">
var ws = new WebSocket("ws://192.168.0.112:8000/chat");
ws.onmessage = function(event) {
  console.log(event.data);
}
ws.onopen = function() {
        console.log('open');
};
ws.onclose = function() {
    console.log('Closed! ');
}
function sendto() {
  ws.send(document.getElementById('chat').value );
}
function send(str){
   ws.send(str); 
}
</script>
</head>

<body>
  <div>
    hello
    <input id="chat">
    <button  onclick="sendto()">send</button>
    <br/>
    <pre>
    <button  onclick="send('w')">up</button>
    <button  onclick="send('a')">left</button><button  onclick="send('d')">right</button>
    <button  onclick="send('s')">down</button>
    <button  onclick="send('x')">stop</button>                                                                                                                     
    </pre>
  </div>
</body>
</html>


python aa.py
http://192.168.0.112:8000



摄像头
http://liyao.me/raspberry-pi-wifi-camera/
分享到:
评论

相关推荐

    树莓派视频小车毕业论文

    【树莓派视频小车毕业论文】是一篇详细介绍如何利用树莓派开发一款远程控制的视频小车的毕业设计项目。该项目的核心在于结合硬件与软件技术,实现通过网页实时查看小车摄像头拍摄的视频,并使用键盘或鼠标进行远程...

    基于python异步io框架Tornado,实现监控遥控命令与web网页指定按键和鼠标(屏幕)点击事件的绑定.zip

    基于python异步io框架Tornado,结合JavaScript的onkeydown事件、 jQuery的mousedown、mouseup、touchstart、touchend事件以及Ajax,实现了监控遥控命令与web网页指定按键和鼠标(屏幕)点击事件的绑定,同时也实现了...

    tornado 4.0.1 python framework guide

    `tornado.platform.caresresolver` 模块提供了一个基于 C-Ares 库的异步 DNS 解析器,它可以高效地执行 DNS 查询,减少了等待时间。 **4.4 tornado.platform.twisted — Twisted 和 Tornado 之间的桥梁** `tornado...

    树小悉树莓派教程截图资料

    我们可以看到树莓派相关的技术栈知识点包括 Fluidd、FluiddPi、Moonraker、API 和 Tornado 等概念。这些技术栈知识点都是基于 Python 语言的,可以帮助开发者快速构建和管理 3D 打印机应用程序。

    Tornado使用指南(中文版)

    通过定义`@tornado.gen.coroutine`装饰器的函数和使用`yield`关键字,开发者可以轻松实现异步操作。 ### 2. Web服务器和路由 Tornado的`tornado.web`模块提供了构建Web应用的基本元素,如RequestHandler、...

    tornado2.2 for win7

    Tornado 2.2是VxWorks操作系统的核心开发工具集,包含了编译器、调试器、集成开发环境(IDE)等一系列组件。它支持多种处理器架构,包括ARM,使得开发者能够在Windows 7环境下进行跨平台的嵌入式开发工作。 二、Win...

    python基于Tornado实现,系统核心调度,可分布式扩展

    例如,可以使用`tornado.gen.coroutine`装饰器来定义协程,这些协程可以在等待异步操作时挂起,并在操作完成时恢复。通过这种方式,我们可以编写出复杂的异步逻辑,而无需嵌套回调,使代码更易于理解和维护。 ...

    tornado替换文件win7_and_win10.zip

    在Windows 7或Windows 10操作系统环境下,Tornado是一个常用的Python异步网络库,用于构建高并发、高性能的Web服务。Tornado 2.2是该库的一个版本,可能存在某些功能上的限制或者与新系统兼容性的问题,因此有时需要...

    tornado官方翻译文档

    Tornado官方翻译文档是关于Tornado这个Python Web框架和异步网络库的使用手册。Tornado是为了解决高并发和长连接问题而设计的,它使用非阻塞的网络I/O模型,从而能够承受成千上万的并发连接,特别适合于实现长轮询、...

    Tornado实战Demo全集

    在IT行业中,Python是一种广泛应用的编程语言,而Tornado是一个基于Python的Web服务器框架和异步网络库。这个“Tornado实战Demo全集”显然是一份面向初学者的资源,旨在帮助他们深入理解和掌握Tornado框架,特别是其...

    树莓派 zero 2W 通过web 操作i2c rda5807 收音机芯片

    在本文中,我们将深入探讨如何使用树莓派 Zero 2W 实现通过Web接口操作I2C总线上的RDA5807收音机芯片,并利用ffmpeg将USB声卡采集的声音推送到流媒体服务器进行远程监听。这个项目涵盖了嵌入式硬件、树莓派编程以及...

    Tornado教程.pdf

    **Tornado 模块详解** Tornado 是一个 Python 开发的 Web 框架和异步网络库,它以其高性能、非阻塞 I/O 和可扩展性而闻名。Tornado 起源于 FriendFeed 团队的需求,后来被 Facebook 收购并开源,现在是开源社区的一...

    tornado docs.pdf

    Tornado是一个Python编写的开源网络框架和异步网络库,最初由FriendFeed开发。Tornado以其非阻塞网络I/O和可扩展性而闻名,能够支持数以万计的开放连接,非常适合需要与每个用户维持长期连接的应用程序,比如长轮询...

    tornado pdf part1打包

    【标题】"tornado pdf part1打包"指的是一个与Tornado相关的PDF文档集合,可能是某个教程或参考资料的合集。这个压缩包包含了多个部分,旨在深入探讨Tornado这一技术。 【描述】"比较全的关于tornado英文PDF,好不...

    tornado堆栈使用说明

    Tornado是VxWorks开发的核心部分,它是一个集成开发环境(IDE),包括了编译器、链接器、调试器以及项目管理工具。这个环境允许开发者编写、构建、调试和优化VxWorks应用程序,同时支持多种编程语言,如C、C++等。 ...

    Tornado入门的基本程序

    例如,你可以使用`@gen.coroutine`装饰器来编写协程: ```python from tornado import gen @gen.coroutine def async_handler(self): result = yield self.fetch("http://example.com") self.write(result....

    tornado-5.0.2.tar.gz及tornado-4.1.tar.gz及tornado-1.2.1.tar.gz

    Tornado是一款开源的Python Web框架和异步网络库,它由Facebook的FriendFeed团队开发,并在2009年开源。Tornado以其高并发、低延迟的特性在Web开发领域中受到广泛的关注,尤其适用于实时Web服务,如聊天、推送通知、...

    WIN7 64位下安装tornado教程

    本教程将详细介绍如何在Windows 7 64位系统上顺利安装Tornado。 首先,确保你的计算机上已经安装了Python。因为Tornado是Python的一个第三方库,所以你需要Python环境才能安装它。如果你还没有安装Python,请访问...

    tornado_code.rar

    在IT行业中,Tornado是一个非常重要的Web框架,尤其在高性能、高并发的场景下表现出色。这个名为“tornado_code.rar”的压缩包文件显然包含了与Tornado框架相关的代码示例,特别是涉及到路由处理、模板渲染以及如何...

Global site tag (gtag.js) - Google Analytics