python解析和打包protobuf

概述

Protocol Buffers,简称protobuf或pb,是Google公司开发的一种数据描述语言,类似于XML和JSON能够将结构化数据序列化用于数据存储、通信协议等方面。目前官方支持C++、JAVA、Python等三种编程语言。

与XML和JSON相比,protobuf在配置时将数据key映射为递增数字,使用二进制传输,并能够根据schema自动生成各语言的打包、解析回kv的代码,非常方便各语言数据互通,且有以下<span

阅读全文

使用python的包管理工具—pip

1 前言

pip 是一个Python包管理工具,主要是用于安装 PyPI 上的软件包,可以替代 easy_install 工具。

2 获取pip

2.1 编译pip

$ wget https://github.com/pypa/pip/archive/7.1.0.tar.gz
$ tar -zxvf pip-7.1.0.tar.gz && cd pip-7.1.0
$ python setup.py install
$ pip --version
$ pip install MySQL-python

2.2 使用包管理软件安装(推荐)

$ sudo yum install python-pip
$ sudo apt-get install python-pip

2.3 更新pip

$ pip install -U pip

3 pip基本使用

3.1 安装PyPI软件

$ pip install SomePackage
  [...]
  Successfully installed SomePackage

3.2 查看具体安装文件

$ pip show --files

阅读全文

python使用ConfigParser读写配置文件

Python 读取写入配置文件很方便,可使用内置的 configparser 模块,位置在 “python27/lib/configparser.py”,该模块支持读取类似ini/conf格式的配置文件。

基础读取函数

  • -read(filename)  直接读取文件内容
  • -sections()  得到所有的section,并以列表的形式返回
  • -options(section)  得到该section的所有option
  • -items(section)  得到该section的所有键值对
  • -get(section,option)  得到section中option的值,返回为string类型
  • -getint(section,option)  得到section中option的值,返回为int类型,还有相应的getboolean()和getfloat() 函数。

基础写入函数

  • -write(fp)  将config对象写入至某个 .init 格式的文件  Write an .ini-format representation of the configuration state.
  • -add_section(section)  添加一个新的section
  • -set( section, option, value)  对section中的option进行设置,需要调用write将内容写入配置文件 ConfigParser2
  • -remove_section(section)  删除某个 section
  • -remove_option(section, option)  删除某个 section 下的 option

代码示例

#config.ini文件
[main]
version = 20110921

[win]
pos = 0,0

#代码

>>>import ConfigParser # RawConfigParser 基本配置类 # ConfigParser 继承之RawConfigParser类,实现了智能特性<br

阅读全文

小猪学arduino—机械6足虫的制作

111

上一篇,我们为6足虫的制作提前准备研究了下 舵机的使用 ,这次,我们开始动手,实现我们的机械6脚虫虫。

准备的材料如下:

3个舵机(用于控制虫子的6条腿)、1个有一定硬度的铁丝(我用的铁质衣撑,用于制作6条腿)、1个核桃露瓶子(用于做虫身)、1个红外线发射和接收器(用于遥控)、1个led灯(用于遥控按下提示灯)、1个220的电阻、1块arduino uno板子及若干连接线。

思路:

由于上一篇 舵机的使用 已经为虫虫的制做做的准备,所以不再赘述,这次相当于在上一次的基础上,改进控制代码,增加遥控器c键初始化虫子脚;play键让虫子向前爬5步。

为了搞清楚虫子的腿应该怎么爬,我跟儿子一起趴床上假装老虎爬了一会儿,得出一个4腿动物的移动方法:左前腿->右后腿->右前腿->左后腿。

按这个思路实现了控制腿的代码逻辑后,用硬纸把舵机粘一起反复测试调角度参数,让它能向前爬动。测试发现4条腿遇到障碍物时容易侧翻,所以又在中间加了两条腿,变成的6脚虫。

之后儿子又提出能不能让虫子自己去外边爬,就一起顺便给虫子用核桃露瓶做了个外壳,把舵机用强力胶粘上去固定好(因为要背电池和板子,比较重),然后用两节18650 锂离子电池串联起来代替电脑usb供电(正极接到VIN端口、负极接到GND端口),再让虫子自己背着电路板和电池。由于负重后压力太大,舵机和腿掉了好几次,后来干脆把腿用502粘到舵机齿轮上了,再根据爬行情况调一下腿和角度参数,反复测试后终于成功,儿子很开心,还用他的超轻彩泥给虫子做了几个脚,哈哈。

v1.0硬纸版效果:

v1.1独自负重版:

(4个腿和6个腿在平地上爬行效果差不多,区别在一侧遇到障碍物时,6脚不容易侧翻)

代码如下:

#include <IRremote.h>//包含红外库 int infraredPin = 3;//红外线接收器端口 long INFRARED_PLAY = 0x00FFA857;//红外遥控器上的PLAY键指令 long INFRARED_LEFT = 0x00FFE01F;//红外遥控器上的左键指令 long INFRARED_RIGHT = 0x00FF906F;//红外遥控器上的右键指令 long INFRARED_UP = 0x00FF02FD;//红外遥控器上的上键指令 long

阅读全文

小猪学arduino—舵机的使用

%e8%88%b5%e6%9c%ba

上一篇文章我们讲到了使用红外线发射和接收装置控制led,儿子看后表示能不能做个遥控器控制一个小虫子走路,研究了一下,打算用两个舵机实现,每个舵机负责虫子的两只脚。本文先用学习一下舵机的使用,并用两个舵机测试一下这种想法的可行性。为了降低测试成本,在某宝5块多的价格买了几个9g的微型舵机。

舵机有很多规格,但所有的舵机都有外接三根线,分别用棕、红、橙三种颜色进行区分,由于舵机品牌不同,颜色也会有所差异,棕色为接地线,红色为电源正极线,橙色为信号线。

舵机的转动的角度是通过调节PWM(脉冲宽度调制)信号的占空比来实现的,标准PWM(脉冲宽度调制)信号的周期固定为20ms50Hz),理论上脉宽分布应在1ms2ms 之间,但是,事实上脉宽可由0.5ms 2.5ms 之间,脉宽和舵机的转角180°相对应。有一点值得注意的地方,由于舵机牌子不同,对于同一信号,不同牌子的舵机旋转的角度也会有所不同。

Arduino 控制舵机的方法有两种,一种是通过Arduino 的普通数字传感器接口产生占空比不同的方波,模拟产生PWM 信号进行舵机定位,第二种是直接利用Arduino 自带的Servo 函数进行舵机的控制,这种控制方法的优点在于程序编写,缺点是只能控制2 路舵机,因为Arduino 自带函数只能利用数字910 接口。

因为后续打算4个脚走路不稳的话给虫子再多加几条腿,所以本文使用第一种pwm脉冲宽度调制的方法控制舵机。

连线方法

如图所示,舵机,棕、红、橙线分别接GND、5V、8号端口

先用一个舵机进行测试,成功后再用两个舵机测试。

我在测试后顺便加上了红外线控制舵机左转、右转,及按钮按下时亮起led(因为遥控器有点不太灵,我又懒得老去看日志)。

实际连线图

具体代码如下:

#include <IRremote.h>//包含红外库 int infraredPin = 3;//红外线接收器端口 long INFRARED_PLAY = 0x00FFA857;//红外遥控器上的PLAY键指令 long INFRARED_LEFT = 0x00FFE01F;//红外遥控器上的左键指令 long INFRARED_RIGHT = 0x00FF906F;//红外遥控器上的右键指令 long INFRARED_UP = 0x00FF02FD;//红外遥控器上的上键指令 long

阅读全文

小猪学arduino—使用红外线发射和接收装置

yaokong

之前我们学习了如何 使用开关控制led灯,这次我们尝试用红外线发射接收装置代替开关 来远程控制led灯。

不同的红外线遥控器的编码方式不同,我们选用了新手常用的NEC协议遥控器:

红外接收装置连线图(led灯连线不再赘述)

如图将VOUT接到10号端口,GND接到实验板上的GND,VCC接到实验板上的+5v

连线效果图:

开发环境安装IRremote扩展

IRremote扩展在硬件上支持多种主控板,软件上支持多种红外协议本,而且便于扩展和用户自定义,使用比较广泛。

搜索并安装IRremote库

增加红外控制代码(红色是变化部分)

#include <IRremote.h>//包含红外库 int onoffPin = 8;//开关输入端口 int infraredPin = 10;//红外线接收器端口 long INFRARED_C = 0x00FFB04F;//红外遥控器上的C键指令 int flickerPin = 9; //闪烁端口 int buzzerPin = 3; //蜂鸣器端口 int orderPin

阅读全文