NetRouter应用教程之Python初接触--基于Widora&Openwrt



  • 生活中,很多时候我们为了完成一件事,而又不得不去完成相关的其他事,进而步入无穷无尽的坑,学习python也是如此。

    Part1:

    为了学python,正常步骤是搭建环境,安装系统,还要考虑python版本,好不容易找到一个可以用的例子,复制上去,中文问题,格式问题,各种各样问题让你望而却步。
    所以我们有一个大胆想法,用openwrt嵌入式开发板做学习开发板,直接在板子上搭建环境,烧写后可以直接测试代码~~~直奔主题。

    Part2:

    为啥学习python,先上一个开源的python,简单代码,实现复杂功能:
    """""
    来自https://github.com/wwj718/raspberrypi_api/blob/master/led_server.py 例子
    """""""""

    #!/usr/bin/env python
    # encoding: utf-8
    
    import RPi.GPIO
    import time
    from flask import Flask
    from flask_cors import CORS, cross_origin
    app = Flask(__name__)
    CORS(app)
    
    ### 指定GPIO口的选定模式为GPIO引脚编号模式(而非主板编号模式)
    RPi.GPIO.setmode(RPi.GPIO.BCM)
    
    ### 指定GPIO14(就是LED长针连接的GPIO针脚)的模式为输出模式
    ### 如果上面GPIO口的选定模式指定为主板模式的话,这里就应该指定8号而不是14号。
    RPi.GPIO.setup(14, RPi.GPIO.OUT)
    ### 循环10次
    @app.route('/led_up')
    def led_up():
        RPi.GPIO.output(14, True)
        return 'ok'
    
    @app.route('/led_down')
    def led_down():
        RPi.GPIO.output(14, False)
        return 'ok'
    ### 闪啊闪
    @app.route('/led_up_down')
    def led_up_down():
      for i in range(0, 5):
        # 让GPIO14输出高电平(LED灯亮)
        RPi.GPIO.output(14, True)
        # 持续一段时间
        time.sleep(0.5)
        # 让GPIO14输出低电平(LED灯灭)
    
    @app.route('/led_up_down')
    def led_up_down():
        for i in range(0, 5):
            # 让GPIO14输出高电平(LED灯亮)
            RPi.GPIO.output(14, True)
            # 持续一段时间
            time.sleep(0.5)
            # 让GPIO14输出低电平(LED灯灭)
            RPi.GPIO.output(14, False)
            # 持续一段时间
            time.sleep(0.5)
        return 'ok'
    ### 最后清理GPIO口(不做也可以,建议每次程序结束时清理一下,好习惯)
    #RPi.GPIO.cleanup()
    if __name__ == '__main__':
    app.run(host='0.0.0.0',port='5000')
    

    虽然代码有注释,但是看完还是一脸懵逼。其实这段代码实现了一个web服务,可以这样控制树莓派io口
    点亮红灯: curl 192.168.0.106/led_up
    熄灭红灯: curl 192.168.0.106/led_down
    闪啊闪 : curl 192.168.0.106/led_up_down

    Part3:

    为啥是python

    一直以来印象:

    • Python类似shell脚本
    • Python可以写个http服务
    • Python可以很简单发送http请求
    • Python是万能的像他
    • Python两句话就能解决c++要捣腾很久的事情。

    也许是对C++膜拜,一直在回避,从来没去正式了解,但是。。。 。。。
    为了能看懂开源工程,为了驶入开源这条大道上,只能伪装成Python好手

    那要怎么开始呢,首先

    1.要懂点shell脚本
    2.要懂点c++。对类有点感觉
    3.懂点网络编程或是你要使用到的应用场景,比如语音,你总得知道语音要处理些啥。

    如果我都没有呢,别怕,看看这个教程好吧。老司机开始开车,请滴卡,让我们用“使用思维“”来套用到学习python上

    1.怎么执行一个python程序:
    和shell脚本一样,不过要带上python NetRouter.py
    我们先写一个打印 “Hello NetRouter In Python”python程序,然后运行一下

    root@Widora:/# python  HelloNetRouter.py 
    Hello NetRouter In Python
    

    查看具体代码,只有一个输出函数调用。。。

    root@Widora:/# cat HelloNetRouter.py
    print("Hello NetRouter In Python")
    

    未完待续~~!

    0_1497963596909_firmware_20170608_python.zip
    pps 系统运行后,将附件上传到widora 的tmp,使用dd命令将镜像烧写到mtdblock3即可


  • administrators

    建议把教程用的固件也一并放到帖子里,方便用户按照教程走。
    或者是基于0.1.7,通过opkg安装到可以支持教程试验的步骤。