So Tired !_! 逆水行舟, 不进则退!

15Aug/19

pycurl libcurl link-time ssl backend (openssl) is different from compile-time ssl backend (none/other)

Posted by Nick Xu

export PYCURL_SSL_LIBRARY=openssl

pip install pycurl --compile --no-cache-dir --global-option=build_ext --global-option="-L/usr/local/opt/openssl/lib" --global-option="-I/usr/local/opt/openssl/include"

Tagged as: Comments Off
19Jun/19

红外遥控接收发射原理及ESP8266实现

Posted by Nick Xu

红外遥控是利用近红外光进行数据传输的一种控制方式。近红外光波长0.76um~1.5um,红外遥控收发器件波长一般为0.8um~0.94um,具有传输效率高,成本低,电路实现简单,抗干扰强等特点,在家用电器上被广泛使用。

红外遥控一般有发射和接收两部分组成,发射元件为红外发射管,接收一般采用一体化红外接收头,但发射载波频率与接收头固定频率需一致才能正确接收。

一、发射

1. 调制

红外遥控是以调制方式发射数据,将数据调制到固定的载波上发送,调制发送抗干扰能力更强,传送距离也更远。红外发送首先要解决的就是调制问题。

目前主流的调制方式有PPMPWM

  • PPM:脉冲位置调制,调制脉冲宽度不变,用脉冲间隔来区分01。如下图所示,脉冲宽度不变都是560us,脉冲间隔改变。逻辑1总时间为2.25ms,逻辑0中时间长度为1.12ms

 

1PPM调制

  • PWM:脉冲宽度调制,脉冲间隔不变,调制脉冲宽度改变。如下图所示,脉冲间隔
    600us,脉冲宽度不同。逻辑1高电平时间为1.2ms,逻辑0高电平时间为0.6ms

 

2PWM调制

调制载波频率一般在30KHz60KHz之间,常用的载波有33K36K36.6K38K40K56K等,其中38K使用最多。

常用占空比有1/31/21/3最多。

2. 红外传输协议

常用的红外传输协议有ITT协议、NEC协议、Nokia NRC协议、Sharp协议、Philips
RC-5
RC-6 RECS-80协议、Sony SIRC协议等,其中最常见的为NEC协议。

常见NEC协议分析:

载波38KHz,逻辑12.25ms,脉冲时间560us;逻辑01.12ms,脉冲时间560us

 

3NEC逻辑’0’与逻辑’1’

l 协议格式

 

4NEC红外载波发送协议

(1) 首先发送9ms的高电平脉冲

(2) 然后发送4.5ms的低电平

(3) 接下来是8bit的地址码(低位在前)

(4) 然后是8bit的地址反码,用于检验地址码是否出错

(5) 接下来的是8bit的命令码(低位在前)

(6) 然后是8bit的命令反码,用于检验命令码是否出错。

l 重复码

5NEC重复发送载波协议

如果一直按着一个键,将以110ms为周期发送重复码,重复码由9ms高电平、2.25ms低电平及560us高电平组成。

 

6NEC重复码

3. 编码

虽然不同协议都对各自的协议格式做了不同定义,但总体而言还是有高低电平组成的一串数据。

对于红外发射,就是按照协议规定高电平时间内,在红外输出口输出固定频率载波;低电平则直接输出低。红外接收头接到载波时输出高电平,没有载波时输出低电平,完成数据解码。

 

7NEC解码后协议

二、接收

红外接收常采用一体化红外接收头,集红外接收、放大、滤波、比较器输出等功能,并输出MCU可识别的TTL信号的。常用的一体化红外接收头有SCR638HS0038VS1838等。

      

SCR638

HS0038

8:一体化接收头

 

红外接收应用电路图:

9:红外接收典型应用

三、ESP8266红外发送与接收

ESP8266定义了1IR红外遥控接口,IR红外遥控接口由软件实现,接口定义如下:

10ESP8266红外管脚定义

1. 发送

ESP8266上用于发送的载波可以通过以下方式实现:

1) I2SBCK

2) WS管脚产生

3) GPIO中的sigma-delta功能在任意GPIO口产生载波。

其中sigma-delta产生的载波占空比约为20%,推荐使用MTMS管脚(GPIO14),可产生准确的38KHz且占空比为50%的标准方波。

2. 接收

红外接收功能通过GPIO的边沿中断实现,读取系统时间,将2次时间相减可以得到波形持续时间,然后通过软件逻辑实现红外协议处理。

 

Filed under: 嵌入式 Comments Off
15May/19

格力空调红外遥控器编码详解

Posted by Nick Xu

可以用于制作格力红外遥控器,这里边有它的编码定义。
格力小王子

一、基本信息:
型号:YB0F2
采用脉冲间距调制。

 

图1:示波器获取波形

 

报头脉冲:9ms
报头间距:4.5ms
载波频率:37.9KHz(38KHz)
码段1与码段2间距:20ms
“1”:脉宽,656us。间距,1640us。
“0”:脉宽,656us。间距,544us。

 

二、编码信息:
1-3位:模式
  • 送风:
图标:风扇。代码:110
  • 自动:
图标:循环箭头。代码:000
  • 除湿:
图标:水滴。代码:010
  • 制冷:
图标:雪花。代码:100
  • 制热:
图标:太阳。代码:001
4位(加68位):开机关机
开机:1
关机:068位取反。
5-6位:风速
一级:10
二级:01
三级:11
自动:00
73741(加65位):扫风
上下扫风110。第65位取反
左右扫风:101
上下左右:111
无扫风:000
8位:睡眠
睡眠:1
不睡眠:0
9-12位与65-68位:温度
制冷模式下:
温度
9-12位
65-68位
30
0111
1000
29
1011
0000
28
0011
1111
27
1101
0111
26
0101
1011
25
1001
0011
24
0001
1101
23
1110
0101
22
0110
1001
21
1010
0001
20
0010
1110
19
1100
0110
18
0100
1010
17
1000
0010
16
0000
1100
制热模式:
温度
9-12位
65-68位
30
0111
0010
29
1011
1100
28
1101
0100
27
1101
1000
26
0101
0000
25
1001
1111
24
0001
0111
23
1110
1011
22
0110
0011
21
1010
1101
20
0010
0101
19
1100
1001
18
0100
0001
17
1000
1110
16
0000
0110
吸湿模式:
温度
9-12位
65-68位
30
0111
0100
29
1011
1000
28
0011
0000
27
1101
1111
26
0101
0111
25
1001
1011
24
0001
0011
23
1110
1101
22
0110
0101
21
1010
1001
20
0010
0001
19
1100
1110
18
0100
0110
17
1000
1010
16
0000
0010
送风模式:
温度
9-12位
65-68位
30
0111
1100
29
1011
0100
28
0011
1000
27
1101
0000
26
0101
1111
25
1001
0111
24
0001
1011
23
1110
0011
22
0110
1101
21
1010
0101
20
0010
1001
19
1100
0001
18
0100
1110
17
1000
0110
16
0000
1010
13-20位:睡眠定时
时间
13-20位
0.5
10010000
1
00011000
1.5
10011000
2
00010100
2.5
10010100
3
00011100
3.5
10011100
4
00010010
4.5
10010010
5
00011010
5.5
10011010
6
00010110
6.5
10010110
7
00011110
7.5
10011110
8
00010001
8.5
10010001
9
00011001
9.5
10011001
10
01010000
10.5
11010000
11
01011000
11.5
11011000
12
01010100
12.5
11010100
13
01011100
13.5
11011100
14
01010010
14.5
11010010
15
01011010
15.5
11011010
16
01010110
16.5
11010110
17
01011110
17.5
11011110
18
01010001
18.5
11010001
19
01011001
19.5
11011001
20
00110000
20.5
10110000
21
00111000
21.5
10111000
22
00110100
22.5
10110100
23
00111100
23.5
10111100
24
00110010
0
00000000
21位:超强
超强:1
普通:0
22位:灯光
亮:1
灭:0
23位与25位:健康,换气
健康:10
换气:01
健康+换气:11
普通:00
24位:制冷模式下-干燥;制热模式下-辅热;
干燥:1
普通:0
45-46位:显示温度
不显示:00
显示:10
显示室内温度:01
显示室外温度:11
其他位:
除了293134位为“1”外,均为“0。其他位功能不详(遥控器无对应项)。
36位和69位分别是码段1和码段2的最后一位,无所谓“0”“1”。
三、其他说明
自动模式下只可以设置的项目有:风速123级、自动;上上下左右扫风;显示温度;灯光;睡眠定时(非睡眠)。其他项均不可以设置。此时温度不可设置,温度段的代码为:10011101

 

关机状态下,可以设置定时开机,代码与睡眠定时关机一样。也可以设置灯光。
制冷模式下,可以设置的项有:温度;扫风;健康换气,节能(仅在此状态下可以设置);风速;定时;超强;睡眠;灯光;温度显示。
除湿模式下,可以设置的项有:温度;扫风;健康换气;干燥;温度显示;定时;睡;灯光。
送风模式下,可以设置的项有:温度;风速;健康换气;扫风;温度显示;定时;灯光。
制热模式下,可以设置的项有:温度;风速;扫风;辅热;温度显示;定时;超强;睡眠;灯光。

 


MGQ 2012-04-14
1、 格力YB0F2红外信号命令格式

红外信号主要包括CMD1和CMD2两部分,其中CMD1包括35 位的命令 和一位停止位,CMD2包括32位的命令和一位停止位。
表格 1 CMD1
Bit:1~3
4
5~6
7
8
模式
开关机(CMD2 32bit取反)
风速
是否扫风
是否睡眠
9~12
13~16
温度
睡眠1
17~20
21
22
23
24
睡眠2
超强
灯光
健康
干燥/辅热
25
26
27
28
29
30
31
32
换气
0
0
0
1
0
1
0
33
34
35
0
1
0

 

表格 2 CMD2
Bit:1
2
3
4
5
6
7
8
上下扫风
0
0
0
左右扫风
0
0
0
9~10
11
12
13
14
15
16
显示温度
0
0
0
0
0
0
17
18
19
20
21
22
23
24
0
0
0
0
0
0
0
0
25
26
27
28
29~32
0
0
0
0
温度

 

Filed under: 单片机 Comments Off
12Apr/19

MySQL error: table is marked as crashed and should be repaired

Posted by Nick Xu

You may experience crashed MyISAM tables in MySQL from times to times, especially after a forced shutdown (kill -9) of MySQL or a crash of the entire server.

The errors will look like this in your logs. InnoDB has good crash recovery on its own and will probably never give you these errors as it self-repairs upon MySQL restart.

[ERROR] /usr/libexec/mysqld: Table './dbname/table_name' is marked as crashed and should be repaired
[ERROR] /usr/libexec/mysqld: Table './dbname/table_name' is marked as crashed and should be repaired
[ERROR] /usr/libexec/mysqld: Table './dbname/table_name' is marked as crashed and should be repaired

You can also find broken tables with the myisamchk tool that is provided by the MySQL server installation.

# myisamchk -s /var/lib/mysql/*/*.MYI
MyISAM-table '/var/lib/mysql/dbname/table_name.MYI' is marked as crashed and should be repaired

The above command will show you each table that is in need of repair.

If a table is reported as damaged, repair it with that same tool.

# myisamchk -r /var/lib/mysql/dbname/table_name.MYI

That solves the problem in most cases. If it doesn't, make sure to stop your webservice (so no new MySQL requests are being made), stop the MySQLd daemon itself and run the following command.

# myisamchk -r --update-state /var/lib/mysql/dbname/table_name.MYI

The --update-state tells MySQL to mark the table as "checked". Restart your MySQLd and webservice and you should be good go to.

If you're up for more mild reading, have a look at the good documentation of MySQL itself on MyISAM repairs.

 

 

Try running the following query:

repair table <table_name>;


mysqlcheck -r --all-databases -u root -p

Filed under: Linux, 数据库 Comments Off
21Mar/19

ubuntu下用python控制usbrelay设备

Posted by Nick Xu

安装:
https://github.com/walac/pyusb

然后参考网友提供的图片内容:

0x21,0x09,0x300,0x0000,[0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00]

中括号里前2个是主要控制参数,

第1个参数, 0xff是打开1个开关,0xfe是打开所有开关,0xfd是关闭1个开关,0xfc是关闭所有开关

第2个参数, 0x01对应第几个开关,当第1个参数是0xfe和0xfc时该参数无效

 

usbrelay-python

Filed under: Linux, Python Comments Off
15Mar/19

ubuntu12.04升级gcc至4.8

Posted by Nick Xu

gcc 4.8.1 是第一个完全支持C++11 的编译器,Windows上可以安装mingw版的,在sourceforge 上有下载,安装也比较方便。在Linux上安装的话需要首先安装一些依赖库。在Ubuntu12.04 lts默认安装的是gcc4.6.3,其实该版本也支持一些c++11的特性,可以通过增加“-std=c++0x” 编译选项来使用这些特性,但是对多线程库的支持较差,gcc 4.8.1 是通过ppa来安装的,因此需要安装ppa repository 。下面就来看一下安装步骤:

首先安装依赖:

sudo apt-get install libgmp-dev
sudo apt-get install libmpfr4 libmpfr-dev
sudo apt-get install libmpc-dev libmpc2
sudo apt-get install libtool
sudo apt-get install m4
sudo apt-get install bison
sudo apt-get install flex
sudo apt-get install autoconf

接下来进入到安装gcc4.8.1 的主要步骤:

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update

sudo apt-get install gcc-4.8
sudo apt-get install g++-4.8
sudo apt-get install gcc-4.8-multilib
sudo apt-get install g++-4.8-multilib
sudo apt-get install gcc-4.8-doc
sudo update-alternatives –install /usr/bin/gcc gcc /usr/bin/gcc-4.8 20
sudo update-alternatives –install /usr/bin/g++ g++ /usr/bin/g++-4.8 20
sudo update-alternatives –config gcc
sudo update-alternatives –config g++

sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get dist-upgrade

之后就可以使用了,通过使用gcc -v 命令可以查看当前gcc的版本是不是已经变成4.8了
---------------------
作者:ithewei
来源:CSDN
原文:https://blog.csdn.net/GG_SiMiDa/article/details/75127393
版权声明:本文为博主原创文章,转载请附上博文链接!

 

 

编译安装报错unrecognized command line option “-std=c++11” 无法识别的命令行选项“-std=c++11” 的解决办法

我们在使用linux系统编译安装报错unrecognized command line option “-std=c++11” 无法识别的命令行选项“-std=c++11” 的提示。出现这个编译错误的原因在g++ gcc 版本不够高。
解决方法:
更新gcc版本默认一般情况是4.4.7版本的gcc
命令查看:

#gcc -v

更新方法

1、下载压缩包进行编译安装

http://ftp.gnu.org/gnu/gcc/
这里是官网提供的下载地址
image.png

下面开始下载解压

wget  
tar -jxvf gcc-4.8.2.tar.bz2

image.png

2、下载供编译需求的依赖项

这个神奇的脚本文件会帮我们下载、配置、安装依赖库,可以节约我们大量的时间和精力。

cd gcc-4.8.0
./contrib/download_prerequisites

3、建立一个文件夹

mkdir gcc-build-4.8.2
cd gcc-build-4.8.2

4、生成Makefile文件

../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib

5、编译安装

make && make intsall

6、检验
image.png

尝试写一个C++11特性的程序段 tryCpp11.cc,使用了shared_ptr

 1 //tryCpp11.cc 
 2 #include <iostream> 
 3 #include <memory> 
 4  
 5 int main() 
 6 { 
 7     std::shared_ptr<int> pInt(new int(5)); 
 8     std::cout << *pInt << std::endl; 
 9     return 0;
 10 }

验证文件:

g++ -std=c++11 -o tryCpp11 tryCpp11.cc
./tryCpp11

 

Filed under: Linux Comments Off
22Jan/19

h3c wa2620i fit ap新设备初始化处理

Posted by Nick Xu

今天新到一台2620i发现无法正常使用, 连上控制台发现存储空间都没格式化, 所以最基础的application都没有, 需要初始化处理一下.

接入console线,通电后在控制台按ctrl+b进入bootware菜单

按9进入Storage Device Operation菜单, 再按1进入Display All Available Nonvolatile Storage Device(s)查看所有存储设备

============================================================================

|Note:the operating device is flash                                        |

|NO.  Device Name  File System  Total Size  Available Space                |

|1    flash        ---          ---         ---                            |

|0    Exit                                                                 |

============================================================================

如果出现类似上面的内容, 即flash这一行里面的file system, totalsize等都是空的, 那就需要先格式化存储, 如果已经显示出空间等信息则不需要格式化操作

按0回到上级菜单, 按CTRL+F开始格式化存储,等待格式化完后,开始下载更新固件

下载更新固件:

首先下载3cdaemon作为TFTP服务器, 然后把ap和电脑接入到同一局域名, 我把电脑ip设置为192.168.10.5, 把wa2600a_fit.bin放到3cdaemon的上传下载目录

在bootware主菜单按3进入Enter Ethernet SubMenu菜单, 再按5进入网络设置,文件名我输入的是wa2600a_fit.bin, ip我使用默认的, 即服务端192.168.10.5和客户端192.168.10.4

设置好后, 按2开始更新主程序, 待更新完即可正常使用.

Tagged as: , , Comments Off
8Jan/19

NodeMCU8266驱动8×8点阵max7219

Posted by Nick Xu

Since the awesome devsaurus recently fixed important SPI issues (#50 is from Christmas 2014!) in NodeMCU it’s now possible to run MAX7219 8×8 LED matrix displays with an ESP8266 and the NodeMCU firmware.

Connect NodeMCU with MAX7219 display

According to the pin layout for the NodeMCU dev kit v1 and v2 (see comparison) you need to connect the MAX7212 as follows:

MAX7219 ESP8266 NodeMCU devkit
VCC +3.3V 3V3
GND GND GND
DIN HSPID/HMOSI D7
CS HSPICS/HCS D8
CLK HSPICLK/HSCLK D5

In the second column I listed commonly found names on pin layouts and schemas. The values in the third column signify the actual pin numbers as printed on the NodeMCU development boards.

Drawing on the MAX7219

Writing and drawing on those 8×8 matrix displays took some getting used to for me. Interestingly the fact that you can rotate them whichever way you like made it more difficult rather than less difficult. There is a way to identify pin 1 but eventually it doesn’t really matter. However, you need to understand how “characters” are represented.

In font files (e.g. cp437.h) you’ll usually see one character per line as an array of 8 hex values. This could look as follows for ‘0’ (zero) :

{ 0x3E, 0x7F, 0x71, 0x59, 0x4D, 0x7F, 0x3E, 0x00 }

MAX7219 8x8 LED matrix displaying 0x3EThere is one byte per column of the 8×8 matrix i.e. 8 bytes. One byte signifies which of the 8 LEDs in a column should be turned on. 0x3E in binary form is 00111110 and every bit represents the state of one LED. So, the first LED and the last two will be OFF while the others will be ON. Again, the notion of “first” and “last” of course depends on the orientation of the matrix but as long as all characters are defined consistently it doesn’t matter. 0x3E on the matrix will look as shown on the left.

 

Moody, cycling through smilys

Moody is a simple program that declares 3 smilys and an array which contains all of them. It shows how to initialize NodeMCU SPI for the MAX7219 8×8 LED matrix and how to cycle through the smilys array and display one face after the other in a loop.

Showtime, please

 

 

Filed under: 单片机 Comments Off
3Jan/19

PWM波控制舵机总结

Posted by Nick Xu

一、关于舵机:

舵机(英文叫Servo):它由直流电机、减速齿轮组、传感器和控制电路组成的一套自动控制系统。通过发送信号,指定输出轴旋转角度。舵机一般而言都有最大旋转角度(比如180度。)与普通直流电机的区别主要在,直流电机是一圈圈转动的,舵机只能在一定角度内转动,不能一圈圈转(数字舵机可以在舵机模式和电机模式中切换,没有这个问题)。普通直流电机无法反馈转动的角度信息,而舵机可以。用途也不同,普通直流电机一般是整圈转动做动力用,舵机是控制某物体转动一定角度用(比如机器人的关节)。

舵机的形状和大小多的让人眼花缭乱,大致可以分为下面这几种(如图所示)

最右边的是常见的标准舵机,中间两个小的是微型舵机,左边魁梧的那个是大扭力舵机。图上这几种舵机都是三线控制。
制作机器人常用的舵机有下面几种,而且每种的固定方式也不同,如果从一个型号换成一个型号,整个机械结构都需要重新设计。
第一种是MG995,优点是价格便宜,金属齿轮,耐用度也不错。缺点是扭力比较小,所以负载不能太大,如果做双足机器人之类的这款舵机不是很合适,因为腿部受力太大。做做普通的六足,或者机械手还是不错的。

第二种是SR 403,这款舵机是网友xqi2因MG995做双足机器人抖动太厉害,摸索找到的,经过测试。制作双足机器人不错~~~至少不抖了。优点是扭力大,全金属齿轮,价格也还算便宜。缺点嘛。。。做工很山寨。。。其他缺点等待反馈

第三种就是传说中的数字舵机AX12+,这个是久经考验的机器人专用舵机。除了价格高,使用RS485串口通信(控制板就得换数字舵机专用控制板),其他都是优点。
下图是一个普通模拟舵机的分解图,其组成部分主要有齿轮组、电机、电位器、电机控制板、壳体这几大部分。
电机控制板主要是用来驱动电机和接受电位器反馈回来的信息。电机嘛,动力的来源了,这个不用太多解释。电位器这里的作用主要是通过其旋转后产生的电阻的变化,把信号发送回电机控制板,使其判断输出轴角度是否输出正确。齿轮组的作用主要是力量的放大,使小功率电机产生大扭矩。
舵机底壳拆开后就可以看到,主要是电机与控制板
控制板拿起来后下方是与控制板连接的电位器
从顶部来看电机与电位器,与电机齿轮直接相连的为第一级放大齿轮。
经过一级齿轮放大后,再经过二、三、四级放大齿轮,最后再通过输出轴输出。
通过上面两图可以很清晰的看到,本舵机是4级齿轮放大机构,就是通过这么一层层的把小的力量放大,使得这么一个小小的电机能有15KG的扭力。

二、舵机控制方法:

舵机的伺服系统由可变宽度的脉冲来进行控制,控制线是用来传送脉冲的。脉冲的参数有最小值,最大值,和频率。一般而言,舵机的基准信号都是周期为20ms,宽度为1.5ms。这个基准信号定义的位置为中间位置。舵机有最大转动角度,中间位置的定义就是从这个位置到最大角度与最小角度的量完全一样。最重要的一点是,不同舵机的最大转动角度可能不相同,但是其中间位置的脉冲宽度是一定的,那就是1.5ms。如下图:
角度是由来自控制线的持续的脉冲所产生。这种控制方法叫做脉冲调制。脉冲的长短决定舵机转动多大角度。例如:1.5毫秒脉冲会到转动到中间位置(对于180°舵机来说,就是90°位置)。当控制系统发出指令,让舵机移动到某一位置,并让他保持这个角度,这时外力的影响不会让他角度产生变化,但是这个是由上限的,上限就是他的最大扭力。除非控制系统不停的发出脉冲稳定舵机的角度,舵机的角度不会一直不变。
当舵机接收到一个小于1.5ms的脉冲,输出轴会以中间位置为标准,逆时针旋转一定角度。接收到的脉冲大于1.5ms情况相反。不同品牌,甚至同一品牌的不同舵机,都会有不同的最大值和最小值。一般而言,最小脉冲为1ms,最大脉冲为2ms。如下图:

三、小总结:

首先是舵机的引线,一般为三线控制(没有接触过不是三线的),红色为电源,棕色为地,黄色为信号。控制舵机的时候,需要不断的给PWM波才能使得舵机在某个角度有扭矩。

Filed under: 单片机 Comments Off
28Dec/18

H3C fit ap同一个SSID下, 设置每个AP的不同VLAN

Posted by Nick Xu

1
2
3
4
5
6
7
8
9
10
11
12
13
14
system-view
vlan 12
quit
interface Vlan-interface 1
undo ip address
quit
interface Vlan-interface 12
ip address 192.168.168.249 255.255.255.0
interface GigabitEthernet 1/0/1
port link-type hybrid
port hybrid vlan 12 untagged
wlan ac ip 192.168.168.100
wlan management-interface Vlan-interface 12
port hybrid pvid vlan 12
Tagged as: , Comments Off
site
site