0%

netstat命令各个参数说明如下:

1
2
3
4
5
6
7
8
9
  -t : 指明显示TCP端口

  -u : 指明显示UDP端口

  -l : 仅显示监听套接字(所谓套接字就是使应用程序能够读写与收发通讯协议(protocol)与资料的程序)

  -p : 显示进程标识符和程序名称,每一个套接字/端口都属于一个程序。

  -n : 不进行DNS轮询,显示IP(可以加速操作)

即可显示当前服务器上所有端口及进程服务,于grep结合可查看某个具体端口及服务情况··

netstat -ntlp //查看当前所有tcp端口·

netstat -ntulp |grep 80 //查看所有80端口使用情况·

netstat -an | grep 3306 //查看所有3306端口使用情况·

查看一台服务器上面哪些服务及端口

netstat -lanp

查看一个服务有几个端口。比如要查看mysqld

ps -ef |grep mysqld

查看某一端口的连接数量,比如3306端口

netstat -pnt |grep :3306 |wc

查看某一端口的连接客户端IP 比如3306端口

netstat -anp |grep 3306

1
2
3
4
5
6
7
8
netstat -an 查看网络端口 

lsof -i :port,使用lsof -i :port就能看见所指定端口运行的程序,同时还有当前连接。

nmap 端口扫描
netstat -nupl (UDP类型的端口)
netstat -ntpl (TCP类型的端口)
netstat -anp 显示系统端口使用情况

简介

Orangepi PC

香橙派平板是一款开源的单板电脑,新一代的arm开发板,它可以运行Android4.4、Ubuntu、Debian等操作系统,兼容树莓派。香橙派平板使用全志H3系统级芯片,同时拥有1GB DDR3 内存,官方网站:http://www.orangepi.cn/orangepipc/index_cn.html

orangepipc_info_cn

无标题2
Orangepi PC是基于全志H3的开源开发板,全志H3主要用于机顶盒产品,具体参数:

20160730144810d6

无标题

无标题1

Armbian系统

Armbian是轻量级的Debian系统和为ARM开发板专门发行并重新编译的Ubuntu系统。关于armbian系统具体介绍可以查看网站https://www.armbian.com/

主要特点:

  • Armbian使用重新编译的Debian Wheezy,Jessie或Ubuntu,它们可靠性极佳。
  • 安装映像降低到实际的数据大小。
  • root密码是1234。第一次登陆时你会被提示更改密码并创建登录用户。
  • 第一次启动需要较长时间(可能长达几分钟)比正常启动(20S)要慢。因为它需要更新软件包列表,获取SSH密钥和扩展系统以适应你的SD卡分区,而且它可能会自动重新启动一次。
  • 可以切换内核以适应其它系统。[1]
  • 桌面环境可以升级准备。
  • NAND,SATA,eMMC和USB安装包含脚本(NAND SATA安装)。
  • 串行控制台启用。
  • 启用自动安全更新下载的系统。升级也可以通过apt-get等方法。

支持的芯片

全志 A10, A20, A31, H3, A64
Amlogic S805
Amlogic S905
Actionsemi S500
飞思卡尔/ NXP iMx6
Marvell Armada A380
三星Exynos 5422
RK3288

支持的ARM板

Beelink X2,
Orange Pi PC plus, Orange Pi Plus 2E, Orange Pi Lite, Orange Pi 2,Orange Pi One, Orange Pi PC, Orange Pi Plus 1 & 2,
Orange Pi A20,Orange Pi mini A20,Orange Pi A31S,
Roseapple Pi,
NanoPi M1,
pcDuino2, pcDuino3, pcDuino3 nano,
Odroid C0/C1/C1+, Odroid C2,Odroid XU4,
Banana Pi M2+,Banana Pi, Banana Pi M2,Banana Pi PRO,Banana Pi Plus A20,
Hummingboard,Hummingboard 2,
Clearfog,
Lemaker Guitar,
Udoo Neo,
Cubieboard 1, Cubieboard 2,
Lamobo R1,
Olimex Lime A10, Olimex Micro, Olimex Lime 2, Olimex Lime 1,
Udoo quad,
Cubox-i,
Cubietruck

编译环境

  • Ubuntu 16.04 LTS 64位
  • orangepi pc开发板

下载源码

源码下载地址:https://github.com/armbian/build

编译系统过程还是比较简单的

(1) 搭建开发环境

编译环境我用的是虚拟机安装的Ubuntu 16.04 64位的系统,新建虚拟机时硬盘空间要足够大,否则编译过程会被中断。我为Ubuntu分配了100G空间,当然物理硬盘占用不会达到100G,主要是为以后编译其他系统留点空间

官方提供的编译环境说明

Supported build environments:

  • Ubuntu Xenial 16.04 x64 guest inside a VirtualBox or other virtualization software,
  • Ubuntu Xenial 16.04 x64 guest managed by Vagrant. This uses Virtualbox (as above) but does so in an easily repeatable way. Please check the Armbian with Vagrant README for a quick start HOWTO,
  • Ubuntu Xenial 16.04 x64 inside a Docker, systemd-nspawn or other container environment (example). Building full OS images inside containers may not work, so this option is mostly for the kernel compilation,
  • Ubuntu Xenial 16.04 x64 running natively on a dedicated PC or a server (not recommended unless you build kernel only, for full OS images always use virtualization as outlined above),
  • 20GB disk space or more and 2GB RAM or more available for the VM, container or native OS,
  • superuser rights (configured sudo or root access).

(2) 开始编译
这里要注意的是网络得通畅,编译过程中会下载一下工具和源码包,一般编译下来没什么问题。我们先编译内核再编译整个系统,编译时使用root用户或者sudo

Execution

1
2
3
4
apt-get -y install git
git clone https://github.com/armbian/build
cd build
./compile.sh

Make sure that full path to the build script does not contain spaces.
检查所有路径不包含空格
You will be prompted with a selection menu for a build option, a board name, a kernel branch and an OS release. Please check the documentation for advanced options and additional customization.
编译过程中会有编译选项选择,板子的名称,内核和系统版本。请查看高级选项和额外定制的文档。
Build process uses caching for the compilation and the debootstrap process, so consecutive runs with similar settings will be much faster.

具体步骤:

(1)首先安装git,Ctrl+Alt+T打开终端输入下面的命令

1
apt-get -y install git

检查git版本

1
git --version

2018-01-20 21-40-09屏幕截图

(2)下载源码,在终端中输入下面的命令

源码可以放在自己习惯的文件夹下,下面是我的

1
2
3
cd /home/iotts/
mkdir armbian
git clone https://github.com/armbian/build

(3)开始编译,在终端中输入下面的命令

1
2
cd build
./compile.sh

2018-01-20 21-31-30屏幕截图

2018-01-20 21-32-37屏幕截图

安装编译工具完成后会进入配置编译配置界面2018-01-20 21-51-53屏幕截图

2018-01-20 21-52-04屏幕截图

2018-01-20 21-52-24屏幕截图

我们选择第二项

2018-01-20 21-52-51屏幕截图

确定以后就开始编译内核了,编译整个系统的步骤基本类似,选择下图中的第二项

2018-01-20 21-51-53屏幕截图

来一张编译完成的图,电脑有点慢编译时间有点长

2018-01-20 16-18-17屏幕截图

以上就是自编译armbian系统的具体步骤

RS232简介:

RS-232-C是美国电子工业协会EIA(Electronic Industry Association)制定的一种串行物理接口标准。RS是英文“推荐标准”的缩写,232为标识号,C表示修改次数。RS-232-C总线标准设有25条信号线,包括一个主通道和一个辅助通道。

在多数情况下主要使用主通道,对于一般双工通信,仅需几条信号线就可实现,如一条发送线、一条接收线及一条地线。

RS-232-C标准规定的数据传输速率为50、75、100、150、300、600、1200、2400、4800、9600、19200、38400波特。

RS-232-C标准规定,驱动器允许有2500pF的电容负载,通信距离将受此电容限制,例如,采用150pF/m的通信电缆时,最大通信距离为15m;若每米电缆的电容量减小,通信距离可以增加。传输距离短的另一原因是RS-232属单端信号传送,存在共地噪声和不能抑制共模干扰等问题,因此一般用于20m以内的通信。具体通讯距离还与通信速率有关,例如,在9600pbs时,普通双绞屏蔽线时,距离可达30-35米。

串行通信接口标准经过使用和发展,目前已经有几种。但都是在RS-232标准的基础上经过改进而形成的。所以,以RS-232C为主来讨论。RS-232C标准是美国EIA(电子工业联合会)与BELL等公司一起开发的1969年公布的通信协议。它适合于数据传输速率在0~20000b/s范围内的通信。这个标准对串行通信接口的有关问题,如信号线功能、电气特性都作了明确规定。由于通信设备厂商都生产与RS-232C制式兼容的通信设备,因此,它作为一种标准,目前已在微机通信接口中广泛采用。

首先,RS-232-C标准最初是远程通信连接数据终端设备DTE(Data Terminal Equipment)与数据通信设备DCE(Data Communicate Equipment)而制定的。因此这个标准的制定,并未考虑计算机系统的应用要求。但目前它又广泛地被借来用于计算机(更准确的说,是计算机接口与终端或外设之间的近端连接标准)。显然,这个标准的有些规定和计算机系统是不一致的。有了对这种背景的了解,我们对RS-232C标准与计算机不兼容的地方就不难理解了。
其次,RS-232C标准中所提到的“发送”和“接收”,都是站在DTE立场上,而不是站在DCE的立场来定义的。由于在计算机系统中,往往是CPU和I/O设备之间传送信息,两者都是DTE,因此双方都能发送和接收。

电气特性

EIA-RS-232C对电气特性、逻辑电平和各种信号线功能都作了规定。

在TxD和RxD上:

$\color{red}{逻辑1(MARK)=-3V~-15V}$

$\color{green}{逻辑0(SPACE)=+3~+15V}$

在RTS、CTS、DSR、DTR和DCD等控制线上:
信号有效(接通,ON状态,正电压)=+3V~+15V
信号无效(断开,OFF状态,负电压)=-3V~-15V

以上规定说明了RS-232C标准对逻辑电平的定义。对于数据(信息码):逻辑“1”(传号)的电平低于-3V,逻辑“0”(空号)的电平高于+3V;对于控制信号;接通状态(ON)即信号有效的电平高于+3V,断开状态(OFF)即信号无效的电平低于-3V,也就是当传输电平的绝对值大于3V时,电路可以有效地检查出来,介于-3~+3V之间的电压无意义,低于-15V或高于+15V的电压也认为无意义,因此,实际工作时,应保证电平在-3V~-15V或+3V~+15V之间。

接口

连接器:由于RS-232C并未定义连接器的物理特性,因此,出现了DB-25、DB-15和DB-9各种类型的连接器,其引脚的定义也各不相同。下面分别介绍两种连接器。
(1)DB-25:PC和XT机采用DB-25型连接器。DB-25连接器定义了25根信号线,分为4组:
①异步通信的9个电压信号(含信号地SG)2,3,4,5,6,7,8,20,22
②20mA电流环信号 9个(12,13,14,15,16,17,19,23,24)
③空6个(9,10,11,18,21,25)
④保护地(PE)1个,作为设备接地端(1脚)
注意,20mA电流环信号仅IBM PC和IBM PC/XT机提供,至AT机及以后,已不支持。
(2)DB-9:
在AT机及以后,不支持20mA电流环接口,使用DB-9连接器,作为提供多功能I/O卡或主板上COM1和COM2两个串行接口的连接器。它只提供异步通信的9个信号。DB-9型连接器的引脚分配与DB-25型引脚信号完全不同。因此,若与配接DB-25型连接器的DCE设备连接,必须使用专门的电缆线。
电缆长度:在通信速率低于20kb/s时,RS-232C 所直接连接的最大物理距离为15m(50英尺)。
最大直接传输距离说明:RS-232C标准规定,若不使用MODEM,在码元畸变小于4%的情况下,DTE和DCE之间最大传输距离为15m(50英尺)。可见这个最大的距离是在码元畸变小于4%的前提下给出的。为了保证码元畸变小于4%的要求,接口标准在电气特性中规定,驱动器的负载电容应小于2500pF。

接口信号

RS-232C 的功能特性定义了25芯标准连接器中的20根信号线,其中2条地线、4条数据线、11条控制线、3条定时信号线,剩下的5根线作备用或未定义。常用的只有10根,它们是:

(1)联络控制信号线:

1
数据发送准备好(Data set ready-DSR)——有效时(ON)状态,表明MODEM处于可以使用的状态。

1
数据终端准备好(Data terminal ready-DTR)——有效时(ON)状态,表明数据终端可以使用。

这两个信号有时连到电源上,一上电就立即有效。这两个设备状态信号有效,只表示设备本身可用,并不说明通信链路可以开始进行通信了,能否开始进行通信要由下面的控制信号决定。
1
请求发送(Request to send-RTS)——用来表示DTE请求DCE发送数据,即当终端准备要接收MODEM传来的数据时,使该信号有效(ON状态),请求MODEM发送数据。它用来控制MODEM是否要进入发送状态。

1
允许发送(Clear to send-CTS)——用来表示DCE准备好接收DTE发来的数据,是与请求发送信号RTS相应的信号。当MODEM准备好接收终端传来的数据,并向前发送时,使该信号有效,通知终端开始沿发送数据线TxD发送数据。

这对RTS/CTS请求应答联络信号是用于半双工MODEM系统中发送方式和接收方式之间的切换。在全双工系统中,因配置双向通道,故不需要RTS/CTS联络信号,使其变高。
1
接收线信号检出(Received Line detection-RLSD)——用来表示DCE已接通通信链路,告知DTE准备接收数据。当本地的MODEM收到由通信链路另一端(远地)的MODEM送来的载波信号时,使RLSD信号有效,通知终端准备接收,并且由MODEM将接收下来的载波信号解调成数字量数据后,沿接收数据线RxD送到终端。此线也叫做数据载波检出(Data Carrier dectection-DCD)线。

1
振铃指示(Ringing-RI)——当MODEM收到交换台送来的振铃呼叫信号时,使该信号有效(ON状态),通知终端,已被呼叫。

(2)数据发送与接收线:
1
发送数据(Transmitted data-TxD)——通过TxD终端将串行数据发送到MODEM,(DTE→DCE)。

1
接收数据(Received data-RxD)——通过RxD线终端接收从MODEM发来的串行数据,(DCE→DTE)。

(3)地线 :

1
GND、Sig.GND——保护地和信号地,无方向。

上述控制信号线何时有效,何时无效的顺序表示了接口信号的传送过程。例如,只有当DSR和DTR都处于有效(ON)状态时,才能在DTE和DCE之间进行传送操作。若DTE要发送数据,则预先将DTR线置成有效(ON)状态,等CTS线上收到有效(ON)状态的回答后,才能在TxD线上发送串行数据。这种顺序的规定对半双工的通信线路特别有用,因为半双工的通信才能确定DCE已由接收方向改为发送方向,这时线路才能开始发送。

接线

在工程当中经常会用到232口,一般是圆头8针与D型9针两种串口。在一定的条件下,必须要自己制作一个相应的”圆头或者是D型的”232串口。
RS232C串口通信接线方法(三线制)
首先,串口传输数据只要有接收数据针脚和发送针脚就能实现:同一个串口的接收脚和发送脚直接用线相连,两个串口相连或一个串口和多个串口相连

同一个串口

接收脚和发送脚直接用线相连对9针串口和25针串口,均是2与3直接相连;

两个不同串口(不论是同一台计算机的两个串口或分别是不同计算机的串口)

DB9-DB9
2-3,3-2,5-5

DB25-DB25
2-3,3-2,7-7

DB9-DB25
2-3,3-2,5-7

上面是对微机标准串行口而言的,还有许多非标准设备,如接收GPS数据或电子罗盘数据,只要记住一个原则:接收数据针脚(或线)与发送数据针脚(或线)相连,彼此交叉,信号地对应相接。

8针圆形串口接线:

2”逻辑地”,4”TXD”,7”RXD”。

9针D型串口:

2”RXD”,3”TXD”,5”逻辑地”。

针脚 信号 定义 作用
1 DCD 载波检测 eceived Line Signal Detector(Data Carrier Detect)
2 RXD 接收数据 Received Data
3 TXD 发送数据 Transmit Data
4 DTR 数据终端准备好 Data Terminal Ready
5 SGND 信号地 Signal Ground
6 DSR 数据准备好 Data Set Ready
7 RTS 请求发送 Request To Send
8 CTS 清除发送 Clear To Send
9 RI 振铃提示 Ring Indicator

使用RS232接口时注意

RS-232-C的电气接口电路采取的是不平衡传输方式,即所谓单端通讯,其发送电平与接收电平的差只有2~3V,所以共模抑制能力较差,容易受到共地噪声和外部干扰的影响,再加上信号线之间的分布电容,因此其传送距离最大为约15米,最高数据传输速率为20kb/s。此外RS-232-C的接口电路的信号电平较高,容易损坏接口电路的芯片,与TTL电路的电平也不兼容,影响其通用性。为了弥补RS-232-C的不足,提高数据传输率和延长通信距离,EIA于1977年制订了RS-499串行通信标准,这个标准对RS-232-C的不足做了改进和补充。

RS-422A是RS-499的标准子集之一。

RS485简介:

RS485的特点:

  1. RS-485的电气特性:采用差分信号正逻辑,逻辑”1”以两线间的电压差为+(2~6)V表示;逻辑”0”以两线间的电压差为-(2~6)V表示。接口信号电平比RS-232-C降低了,就不易损坏接口电路的芯片, 且该电平与TTL电平兼容,可方便与TTL电路连接。
  2. RS-485的数据最高传输速率为10Mbps。
  3. RS-485接口是采用平衡驱动器和差分接收器的组合,抗共模干扰能力增强,即抗噪声干扰性好。
  4. RS-485最大的通信距离约为1219m,最大传输速率为10Mbps,传输速率与传输距离成反比,传输速率越低,传输距离越长,如果需传输比RS-485最大通信距离更长的距离,需要加485中继器。RS-485总线一般最大支持32个节点,如果使用特制的485芯片,可以达到128个或者256个节点,最大的可以支持到400个节点。
    因为RS485接口组成的半双工网络,一般只需二根连线(一般叫AB线),所以RS485接口均采用屏蔽双绞线传输。

    接口

    RS485接口组成的半双工网络,一般是两线制(以前有四线制接法,只能实现点对点的通信方式,现很少采用),多采用屏蔽双绞线传输。这种接线方式为总线式拓扑结构在同一总线上最多可以挂接32个结点。在RS485通信网络中一般采用的是主从通信方式,即一个主机带多个从机。很多情况下,连接RS-485通信链路时只是简单地用一对双绞线将各个接口的“A”、“B”端连接起来。RS485接口连接器采用DB-9的9芯插头座,与智能终端RS485接口采用DB-9(孔),与键盘连接的键盘接口RS485采用DB-9(针)。

    使用RS485接口时注意

    使用RS485接口时应注意的问题

    参考电路:

    fig1.jpg

    原理:

    RS232-485转换器主要包括了电源、232电平转换、485电路三部分。本电路的232电平转换电路采用了NIH232或者也可以直接使用MAX232集成电路,485电路采用了MAX485集成电路。为了使用方便,电源部分设计成无源方式,整个电路的供电直接从PC机的RS232接口中的DTR(4脚)和RTS(7脚)窃取。PC串口每根线可以提供大约9mA的电流,因此两根线提供的电流足够供给这个电路使用了。经实验,本电路只使用其中一条线也能够正常工作。使用本电路需注意PC程序必须使串口的DTR和RTS输出高电平,经过D3稳压后得到VCC,经过实际测试,VCC电压大约在4.7V左右。因此,电路中要说D3起的作用是稳压还不如说是限压功能。

  MAX485是通过两个引脚RE(2脚)和DE(3脚)来控制数据的输入和输出。当RE为低电平时,MAX485数据输入有效;当DE为高电平时,MAX485数据输出有效。在半双工使用中,通常可以将这两个脚直接相连,然后由PC或者单片机输出的高低电平就可以让MAX485在接收和发送状态之间转换了。由于本电路DTR和RTS都用于了电路供电,因此使用TX线和HIN232的另外一个通道及Q1来控制MAX485的状态切换。平时NIH232的9脚输出高电平,经Q1倒相后,使MAX485的RE和DE为低电平而处于数据接收状态。当PC机发送数据时,NIH232的9脚输出低电平,经Q1倒相后,使MAX485的RE和DE为高电平而处于数据发送状态。

原文连接

Arduino IDE 的缺点

虽然 Arduino 很流行很火爆,但是 Arduino IDE 却非常、非常、非常弱。编写代码很不方便,只能说提供了一个最基本的写代码的工具而已,调试代码也很不方便。而且,Arduino IDE 中写代码,只能是把所有的源代码都集中在一个 .ino 文件中,对于写惯了 C++ 程序的工程师来说,Arduino IDE 完全不具备工程化的可能,只能给一般的爱好者当一个玩具而已。

所以,本教程既然大言不惭地号称是“高级”教程,首先要做的就是替换掉 Arduino IDE 这个开发工具。当然实际上并不是真的替换掉了 Arduino IDE 的所有的东西,而是把它的有用的工具链(gcc toolchain)进行了重用,然后编写代码、代码管理和调试等工作由更现代化的工具来完成。

代替Arduino IDE工具安装

替代工具:Arduino for Visual Studio(Visual Micro)

说到太阳系中最强大和最友好的 C++ IDE,我个人认为是Visual Studio。当然您可能并不赞同我的说法,或许您更倾向于 Eclipse。好吧,您可以自行寻找解决办法,用 Eclipse 开发 Arduino 也是完全可行的,也有好事者用 vim 开发 Arduino……抱歉,扯远了。

在本节中,我们需要用到两个软件:

  1. Visual Studio

  2. Visual Micro (Arduino for Visual Studio 插件)

Visual Micro 的原理

简单说一下为什么我们可以在 Visual Studio 中开发 Arduino 应用程序。

官方的 Arduino IDE 开发 Arduino 应用程序,是这样的:
clip_image001.png

而 Visual Studio + Visual Micro 开发 Arduino 应用程序,是这样的:
clip_image002.png

所以说,我们替换掉的仅仅是 Arduino IDE 这个蹩脚的代码开发工具,但是编译、调试和代码烧写用的还是原来的 gcc toolchain。

$\color{red}{Notes:}$上图中,你会看到Atmel Studio。Atmel Studio是Atmel公司推出的免费开发工具,它是基于Visual Studio Shell的。所以本文虽然是针对Visual Studio来讲的,但也同时适用于Atmel Studio。

有关详细的Visual Micro工作原理的解释,请看这里:How the Software Tools WorkTogether

Visual Studio 安装

Visual Studio 有很多版本,比如说 Professional、Enterprise、Ultimate……这些都可以用来开发 Arduino 应用程序。当然对于个人开发者来说,可能不会去购买付费版本的 Visual Studio,那么用免费的 Community 版本就可以了。

在本例中,我使用的是 Visual Studio Community 2015。

在安装 Visual Studio 的时候,有很多可选项,对于开发 Arduino 应用程序来说,只要装有 C++ 开发的安装选项即可。

Visual Micro 安装

Visual Micro 的官方网站是:http://www.visualmicro.com
这个软件有收费版和免费版,收费版也不贵,Commercial $75
for 1 PC,批量有优惠。对于个人来说,装免费版就完全够用了。

所以说我们用的 Visual Studio 和 Visual Micro 都可以用免费的版本,对个人来说经济上零压力。

Visual Micro 下载下来是一个 .vsix 的安装包,双击就可以进行安装了。注意安装前要关掉 Visual Studio。
clip_image003

接下来我们应该进行 Visual Micro 的设置。

设置 Visual Micro

安装 Visual Micro 之后,首次打开 Visual Studio,就会弹出以下窗口:
clip_image004

以上窗口中,我们需要正确选择 Arduino IDE 的版本和安装位置,好让 Visual Micro 能够帮助 Visual Studio 找到相应的 gcc toolchain。

至于其它的设置项(Optional sketchbook location、Optional additional boards manager urls),我们现在初始设置的时候可以先不理会,以后需要的时候可以再对此做设置。

实际上 Visual Micro 已经根据注册表里面的信息自动填好了初始设置项,我现在需要做的仅仅是确认无误之后点击“OK”按钮就可以了。

选择软件版本、开发板型号和端口

然后,你会发现 Visual Studio 的工具栏和菜单里面多了这些东西:

clip_image005

clip_image006

看来它是把 Arduino IDE 的工具栏和菜单里面的东西搬到这里来了。

新建Arduino工程

接下来我们就可以体验在 Visual Studio 里面写 Arduino 程序了。

如下图新建一个Aarduino工程
clip_image008.png
clip_image009.png
接下来我们先写一个点灯的程序
直接贴代码了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void setup()
{

/* add setup code here */
pinMode(13,OUTPUT);
}

void loop()
{
digitalWrite(13, HIGH);
delay(200);
digitalWrite(13, LOW);
delay(200);
/* add main program code here */

}

编译的话我们选择正式编译Release
接下来根据开发板的具体情况选择板子类型、端口号
clip_image010.png
点击Start编译并将程序下载到开发板上,然后就会看到灯在闪烁
1.gif

1
2
3
插入视频代码:

<iframe height=498 width=510 src="http://player.youku.com/embed/XNjcyMDU4Njg0">
1
2
3
插入gif代码:

<iframe height=500 width=500 src="http://ww4.sinaimg.cn/mw690/e75a115bgw1f3rrbzv1m8g209v0diqv7.gif">

前几天花了4.3美元在TI官网买了一开MSP430FR2433 LaunchPad™ Development Kit
(MSPEXP430FR2433),今天花一点时间来个简单的入门。板子很简单见下图
TIM截图20180113204831.png

开发板自带一个调试工具和串口调试工具,性价比还是挺高的。
开发板的资源见下图:

TIM截图20180113205502.png

首先我们先来一个简单的点灯例程,接下来从新建工程----编写点灯程序----效果演示顺序开始介绍

创建一个CCS工程

CCS其实就是eclipse安装了TI的一些开发插件,CCS的安装教程就不提了比较简单,从TI官网下载CCS,选择单片机的型号,接下来基本上是下一步就行了。接下来主要讲如何新建工程

File > New > CCS Project
具体配置如下:

  • Target:MSP430FR2433
  • Project name:Hello_Led
  • Location:随自己的意愿
  • Project templates and examples : Empty Project(with main.c)

    FIG2

开始编写自己的程序

上面我们创建好了MSP430的工程,具体如下:
fig3
创建工程后系统已经添加好了msp430的头文件

1
#include <msp430.h>

当然也可以自己根据具体型号添加头文件,我用的是MSP430FR2433,所以我们可以改成#include <msp430fr2433.h>这个头文件包含了 MSP430FR2433 的寄存器定义和内置函数。
main函数部分,以下是闪灯的程序,也是CCS自带的示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main(void) {
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
PM5CTL0 &= ~LOCKLPM5; // Disable the GPIO power-on default high-impedance mode
P1DIR |= BIT0; // Set P1.0 to output direction

for(;;) {
volatile unsigned int i; // volatile to prevent optimization

P1OUT ^= 0x01; // Toggle P1.0 using exclusive-OR

i = 10000; // SW Delay
do i--;
while(i != 0);
}
return 0;
}

1
P1DIR |= BIT0;

这一行中,我们将 P1.0 引脚设置为输出(P1.0 与开发板上 Led1 相连)。在 MSP430 中,P1DIR 是一个控制 Port1 引脚方 向的八位寄存器。如果你把某一位配置为 0,则它作输入用,反之 是输出。BIT0 是一个系统定义的常量,即 0x0001(详见<msp430fr2433.h>)。

如果一切顺利的话,现在我们可以把我们的程序下载到单片机运行了。

将程序下载到单片机

TIM截图20180113203355编译按钮

TIM截图20180113203408Debug 按钮,编译通过之后,我们按这个按钮会下载程序并进入 DEBUG 模式

TIM截图20180113203554红色按钮终止 DEBUG 模式

LED 程序已经下载到单片机中,如果你观察到红色的 LED 灯会随着按键亮灭,那么恭喜你,你已经完成了第一 个 MSP430的项目。

前言

MQTT是IBM开发的一个即时通讯协议,面向M2M和物联网的连接,采用轻量级发布和订阅消息传输机制,并且有可能成为物联网的重要组成部分。

ESP8266是一款物美价廉的Wi-Fi芯片,集成Tensilica L106 钻石系列的32 位处理器和片上SRAM,多达17 个GPIO口,并拥有IIC、IIS、UART、PWM、IR遥控等片上资源。

ESP8266还提供官方的软件开发开发包(SDK),目前最新版本是「ESP8266 NONOS SDK V2.2.0」。

这篇文章主要讲解如何使用ESP8266作为MQTT客户端,并连上在本地电脑搭建的MQTT服务器。

开发环境

首先简单说明一下博主的开发环境:

  • ESP8266开发环境:ESP8266 IDE 2.0
  • ESP8266 SDK版本:ESP8266 NONOS SDK V2.2.0
  • MQTT服务器:Apollo 1.7.1(本地搭建)
  • 操作系统:64位 Win10系统
  • ESP8266开发板:NodeMCU(4MB Flash)

导入工程

如果读者和博主使用的开发环境一样,那么步骤1~4就好理解了,不是的话直接看图片和步骤5:

  1. 在IDE环境中通过「File」->「Import」;
  2. 弹窗中选择「C/C++」->「Existing Code as Makefile project」;
  3. 下一步「Browse…」,编译器选择「Cygwin GCC」;
  4. 之后导入的工程目录如上图,其中给「dirver_lib」文件下面的Makeflie添加bak后缀或删除掉,免得编译通不过。
  5. 从「example」文件夹中拷贝esp_mqtt_proj文件夹到主目录,点击编译按钮,如果成功就完成这一步骤了。

img

工程目录

工程目录图

代码分析

img

mqtt例程目录

user_main.c

mqtt_config.h

其中user_main.c不用说了,玩过ESP8266的朋友都知道这是放主代码的地方,其中user_init函数是SDK提供开发者放置初始化代码的地方。下面主要分析mqtt_config.h。

mqtt_config.h代码清单

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#ifndef __MQTT_CONFIG_H__
#define __MQTT_CONFIG_H__

#define CFG_HOLDER 0x00FF55A4 /* Change this value to load default configurations */
#define CFG_LOCATION 0x79 /* Please don't change or if you know what you doing */
#define MQTT_SSL_ENABLE

/*DEFAULT CONFIGURATIONS*/

#define MQTT_HOST "192.168.1.100" //or "mqtt.yourdomain.com"
#define MQTT_PORT 1883
#define MQTT_BUF_SIZE 1024
#define MQTT_KEEPALIVE 120 /*second*/

#define MQTT_CLIENT_ID "DVES_%08X"
#define MQTT_USER "DVES_USER"
#define MQTT_PASS "DVES_PASS"

#define STA_SSID "DVES_HOME"
#define STA_PASS "yourpassword"
#define STA_TYPE AUTH_WPA2_PSK

#define MQTT_RECONNECT_TIMEOUT 5 /*second*/

#define DEFAULT_SECURITY 0
#define QUEUE_BUFFER_SIZE 2048

#define PROTOCOL_NAMEv31 /*MQTT version 3.1 compatible with Mosquitto v0.15*/
//PROTOCOL_NAMEv311 /*MQTT version 3.11 compatible with https://eclipse.org/paho/clients/testing/*/

#endif // __MQTT_CONFIG_H__

在这个文件中,有几个宏定义可能需要修改的

  • MQTT_HOST,MQTT服务器地址
  • MQTT_PORT,MQTT服务器端口
  • MQTT_USER,MQTT服务器用户名
  • MQTT_PASS,MQTT服务器密码
  • STA_SSID,WI-FI帐号
  • STA_PASS,WI-FI密码

还有一个最重要的宏定义——CFG_HOLDER,因为这个MQTT示例在ESP8266运行过一次后会把这些信息保存到FLASH中,如果要继续修改这些信息,记得要修改CFG_HOLDER这个宏定义,改成另一个数值即可。

CFG_HOLDER作的用是:在CFG_Load函数中,如果发现从FLASH读取出来的CFG_HOLDER数值和宏定义的不一样,则会更新这些信息,并保存到FLASH中。不修改CFG_HOLDER的话可能会发觉明明用户名和密码都正确但是就是连接不上去。

修改代码及测试

修改代码

根据上面分析,下面我们就可以修改示例代码:

  1. STA_SSIDSTA_PASS修改为自己的WiFI名和密码;
  2. 修改MQTT_USERMQTT_PASS为对应的MQTT服务器的用户名和密码,Apollo服务器默认是adminpassword
  3. 修改MQTT_HOSTMQTT_PORT为MQTT服务器IP和PORT,目前是使用本地的MQTT服务器,所以是修改为自己电脑的IP和61613端口,PORT是整型值;
  4. 根据MQTT服务器的协议不同,可能需要使用MQTT v3.1.1版本,所以把PROTOCOL_NAMEv31注释掉,使用PROTOCOL_NAMEv311。源码的PROTOCOL_NAMEv311前面没有#define,自己加上就行。
  5. 最后,修改CFG_HOLDER,以让这些配置生效,直接给原来CFG_HOLDER定义的数值加1即可。

img

修改示例配置

编译下载

编译,查看Console窗口,如果输出

img

编译信息

那说明代码已经编译成功。另外要注意,ESP8266 SDK v2.0以后版本生成的eagle.irom0text.bin烧写起始地址是0x10000,而之前的版本烧写地址是0x40000;eagle.flash.bin还是0x00000。由于博主使用的是4MB Flash的ESP8266,所以也建议读者先确定手头的ESP8266是不是4MB Flash(即32Mbit Flash,注意单位!4MB=32Mbit,Flash一般是以bit计算!)

另外如果Problems窗口报Errors的,只要Console窗口编译通过,就可以不用管。

下载配置参考图片:

img

下载配置

提醒:blank.bin和default.bin烧写一次就行,另外也要留意不同的Flash大小,blank.bin和default.bin烧写地址也不同。

上电测试

如果前面一切顺利,打开串口,设置波特率为115200,上电后前面的乱码不用管,之后串口打印信息如下,省略了一部分信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
> load ...
> default configuration
> MQTT_InitConnection
> MQTT_InitClient

WIFI_INIT

> ……(省略)

> connected with **[你的WiFi名]**, channel 6
> dhcp client start...
> STATION_IDLE
> STATION_IDLE
> ip:**[WiFi分配给ESP8266的IP]**,mask:255.255.255.0,gw:**[WiFi网关IP]**
> TCP: Connect to ip **[MQTT服务器IP:PORT]**
> MQTT: Connected to broker **[MQTT服务器IP:PORT]**
> MQTT: Sending, type: 1, id: 0000
> TCP: Sent
> TCP: data received 4 bytes
> MQTT: Connected to **[MQTT服务器IP:PORT]**
> MQTT: Connected
> MQTT: queue subscribe, topic"/mqtt/topic/0", id: 1
> MQTT: queue subscribe, topic"/mqtt/topic/1", id: 2
> MQTT: queue subscribe, topic"/mqtt/topic/2", id: 3
> MQTT: queuing publish, length: 23, queue size(66/2048)
> MQTT: queuing publish, length: 25, queue size(91/2048)
> MQTT: queuing publish, length: 25, queue size(118/2048)
> ……

其中加粗带方括号的字段根据测试环境不同而不同。

同时看源码和串口信息可知,ESP8266向MQTT服务器订阅了三个主题,假设使用的是本地搭建的MQTT服务器,那么查看MQTT服务器后台就可以看到:

img

ESP8266MQTT示例代码订阅

同时在后台的Connects页面也可以看到ESP8266的链接:

img

ESP8266后台链接

MQTT本地服务器搭建教程Windows版链接在后面。

另外博主已经用ESP8266的MQTT连接上了OneNET云,连接该云需要注释掉下面这条语句,在user_init函数下。

1
MQTT_InitLWT(&mqttClient, "/lwt", "offline", 0, 0);

原因是OneNET不支持,否则连接不上。

其他


前言

现在物联网这么火,当然不能落伍,MQTT极有可能成为物联网应用最广的协议,因此需要一个MQTT测试环境就很有必要了

开发环境

系统: Ubuntu 16.04.3 LTS

代理服务器 :Apache-Apollo-1.7.1

准备工作

1. 安装Java环境

由于搭建Apollo环境变量需要有JAVA_HOME,这个时候需要安装JDK,具体安装参考《Ubuntu安装JDK1.8.0并配置环境变量

2. Apache-Apollo-1.7.1下载及解压

首先是下载Apache-Apollo,下载页面:http://www.apache.org/dyn/closer.cgi?path=activemq/activemq-apollo/1.7.1/apache-apollo-1.7.1-unix-distro.tar.gz

或者输入下面命令:

1
2
3
iotts@jacklu:~$ cd /home/iotts/
iotts@jacklu:~$ mkdir apache-apollo
wget http://mirror.bit.edu.cn/apache/activemq/activemq-apollo/1.7.1/apache-apollo-1.7.1-unix-distro.tar.gz

解压源码包:

1
tar -zxvf apache-apollo-1.7.1-unix-distro.tar.gz

配置

进入apache-apollo-1.7.1/bin目录

1
cd apache-apollo-1.7.1/bin/

输入./apollo可以查看帮助
1
2
3
4
5
6
7
8
9
10
iotts@jacklu:~/apache-apollo/apache-apollo-1.7.1/bin$ ./apollo
usage: apollo [--log <log_level>] <command> [<args>]

The most commonly used apollo commands are:
create creates a new broker instance
disk-benchmark Benchmarks your disk's speed
help Display help information
version Displays the broker version

See 'apollo help <command>' for more information on a specific command.

创建MQTT服务器

创建一个Broker示例:./apollo create iotts_broker。执行后就会在bin目录下创建 iotts_broker文件夹。(MQTT服务器都是叫Broker)

1
2
3
4
5
6
7
8
9
10
11
12
iotts@jacklu:~/apache-apollo/apache-apollo-1.7.1/bin$ ./apollo create iotts_broker
Creating apollo instance at: iotts_broker
Generating ssl keystore...

You can now start the broker by executing:

"/home/iotts/apache-apollo/apache-apollo-1.7.1/bin/iotts_broker/bin/apollo-broker" run

Or you can setup the broker as system service and run it in the background:

sudo ln -s "/home/iotts/apache-apollo/apache-apollo-1.7.1/bin/iotts_broker/bin/apollo-broker-service" /etc/init.d/
/etc/init.d/apollo-broker-service start

后面会有提示怎么启动服务器,以及创建一个service。

启动Apollo :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
iotts@jacklu:~/apache-apollo/apache-apollo-1.7.1/bin$ iotts_broker/bin/apollo-broker run

_____ .__ .__
/ _ \ ______ ____ | | | | ____
/ /_\ \\____ \ / _ \| | | | / _ \
/ | \ |_> > <_> ) |_| |_( <_> )
\____|__ / __/ \____/|____/____/\____/
\/|__| Apache Apollo (1.7.1)


Loading configuration file '/home/iotts/apache-apollo/apache-apollo-1.7.1/bin/iotts_broker/etc/apollo.xml'.
INFO | OS : Linux 4.10.0-42-generic (Ubuntu 16.04.3 LTS)
INFO | JVM : Java HotSpot(TM) Server VM 1.8.0_151 (Oracle Corporation)
INFO | Apollo : 1.7.1 (at: /home/iotts/apache-apollo/apache-apollo-1.7.1)
INFO | OS is restricting the open file limit to: 100000
INFO | Accepting connections at: tcp://0.0.0.0:61613
INFO | Accepting connections at: tls://0.0.0.0:61614
INFO | Starting store: leveldb store at /home/iotts/apache-apollo/apache-apollo-1.7.1/bin/iotts_broker/data
INFO | Accepting connections at: ws://0.0.0.0:61623/
INFO | Accepting connections at: wss://0.0.0.0:61624/
INFO | virtual host startup is waiting on store startup
INFO | virtual host startup is no longer waiting. It waited a total of 1 seconds.
INFO | broker startup is waiting on start jetty webserver
INFO | Administration interface available at: https://127.0.0.1:61681/
INFO | Administration interface available at: http://127.0.0.1:61680/
INFO | broker startup is no longer waiting. It waited a total of 7 seconds.

查看打印信息即可知道MQTT要连接的端口和管理页面端口。

然后打开浏览器上,输入 http://127.0.0.1:61680/https://127.0.0.1:61681/
即可进入 Apollo Console 窗口。
微信截图_20180111233348.png

默认的登录id和密码是 admin 和 password
微信截图_20180111233514.png