科技爱好者博客 http://blog.lxx1.com 开源知识分享博客,讨论树莓派、Arduino、Linux、服务器使用配置教程 Sat, 24 Jun 2017 08:03:30 +0000 zh-CN hourly 1 https://wordpress.org/?v=4.8 Alias 配置别名并且设置永久生效 http://blog.lxx1.com/2816?pk_campaign=feed&pk_kwd=alias-%25e9%2585%258d%25e7%25bd%25ae%25e5%2588%25ab%25e5%2590%258d%25e5%25b9%25b6%25e4%25b8%2594%25e8%25ae%25be%25e7%25bd%25ae%25e6%25b0%25b8%25e4%25b9%2585%25e7%2594%259f%25e6%2595%2588 http://blog.lxx1.com/2816?pk_campaign=feed&pk_kwd=alias-%25e9%2585%258d%25e7%25bd%25ae%25e5%2588%25ab%25e5%2590%258d%25e5%25b9%25b6%25e4%25b8%2594%25e8%25ae%25be%25e7%25bd%25ae%25e6%25b0%25b8%25e4%25b9%2585%25e7%2594%259f%25e6%2595%2588#respond Sat, 24 Jun 2017 08:02:02 +0000 http://blog.lxx1.com/?p=2816 Alias 配置别名并且设置永久生效,首发于科技爱好者博客

bash中有些命令的使用频率非常高,我们可以将这些命令配置别名,从而提高Linux下的使用效率。这篇文章讲解的alias命令用来设置指令的别名,将一些较长的命令进行简化,同时将其设置为永久生效。

Alias 配置别名并且设置永久生效,首发于科技爱好者博客

]]>
Alias 配置别名并且设置永久生效,首发于科技爱好者博客

bash中有些命令的使用频率非常高,我们可以将这些命令配置别名,从而提高Linux下的使用效率。这篇文章讲解的alias命令用来设置指令的别名,将一些较长的命令进行简化,同时将其设置为永久生效。


alias命令语法

alias (选项) (参数)

alias 的基本使用方法为: alias 新的命令='原命令 -选项/参数'

例如:

alias l=‘ls -lsh' #将重新定义ls命令,现在只需输入l ,就相当于输入了ls -lsh
alias #列出当前系统中所有已经定义的命令别名
unalias l #要删除一个别名l

 

配置alias永久生效

直接使用alias命令设置的别名只在当前登录有效,如果退出登录以及重启,别名会失效。那么怎样才能让alias别名永久生效呐。只要编辑当前目录下的.bashrc文件,加入alias别名,就可以永久生效。

[root@ubuntu ~]# nano .bashrc

加入:

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias l='ls -lh --color=auto'
alias ..='cd ..'
alias ...='cd ../..'

然后保存退出,重新载入.bashrc文件,即可让我们的环境生效

[root@ubuntu ~]# source .bashrc

Alias 配置别名并且设置永久生效,首发于科技爱好者博客

]]>
http://blog.lxx1.com/2816?pk_campaign=feed&pk_kwd=alias-%25e9%2585%258d%25e7%25bd%25ae%25e5%2588%25ab%25e5%2590%258d%25e5%25b9%25b6%25e4%25b8%2594%25e8%25ae%25be%25e7%25bd%25ae%25e6%25b0%25b8%25e4%25b9%2585%25e7%2594%259f%25e6%2595%2588/feed 0
Linux 下让进程在后台可靠运行的几种方法(nohup/setsid/&) http://blog.lxx1.com/2808?pk_campaign=feed&pk_kwd=linux-%25e4%25b8%258b%25e8%25ae%25a9%25e8%25bf%259b%25e7%25a8%258b%25e5%259c%25a8%25e5%2590%258e%25e5%258f%25b0%25e5%258f%25af%25e9%259d%25a0%25e8%25bf%2590%25e8%25a1%258c%25e7%259a%2584%25e5%2587%25a0%25e7%25a7%258d%25e6%2596%25b9%25e6%25b3%2595%25ef%25bc%2588nohupsetsid%25ef%25bc%2589 http://blog.lxx1.com/2808?pk_campaign=feed&pk_kwd=linux-%25e4%25b8%258b%25e8%25ae%25a9%25e8%25bf%259b%25e7%25a8%258b%25e5%259c%25a8%25e5%2590%258e%25e5%258f%25b0%25e5%258f%25af%25e9%259d%25a0%25e8%25bf%2590%25e8%25a1%258c%25e7%259a%2584%25e5%2587%25a0%25e7%25a7%258d%25e6%2596%25b9%25e6%25b3%2595%25ef%25bc%2588nohupsetsid%25ef%25bc%2589#respond Sun, 18 Jun 2017 03:20:35 +0000 http://blog.lxx1.com/?p=2808 Linux 下让进程在后台可靠运行的几种方法(nohup/setsid/&),首发于科技爱好者博客

我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, 结果却由于网络的不稳定导致任务中途失败。如何让命令提交后不受本地关闭终端窗口以及网络断开连接的干扰呢?下面举了一些例子, 可以针对不同的场景选 ...

Linux 下让进程在后台可靠运行的几种方法(nohup/setsid/&),首发于科技爱好者博客

]]>
Linux 下让进程在后台可靠运行的几种方法(nohup/setsid/&),首发于科技爱好者博客

我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, 结果却由于网络的不稳定导致任务中途失败。如何让命令提交后不受本地关闭终端窗口以及网络断开连接的干扰呢?下面举了一些例子, 可以针对不同的场景选择不同的方式来处理这个问题。

场景:

如果只是临时有一个命令需要长时间运行,什么方法能最简便的保证它在后台稳定运行呢?

hangup 名称的来由

在 Unix 的早期版本中,每个终端都会通过 modem 和系统通讯。当用户 logout 时,modem 就会挂断(hang up)电话。 同理,当 modem 断开连接时,就会给终端发送 hangup 信号来通知其关闭所有子进程。

解决方法:

我们知道,当用户注销(logout)或者网络断开时,终端会收到 HUP(hangup)信号从而关闭其所有子进程。因此,我们的解决办法就有两种途径:要么让进程忽略 HUP 信号,要么让进程运行在新的会话里从而成为不属于此终端的子进程。

1. nohup

nohup 无疑是我们首先想到的办法。顾名思义,nohup 的用途就是让提交的命令忽略 hangup 信号。nohup 的使用是十分方便的,只需在要处理的命令前加上 nohup 即可,标准输出和标准错误缺省会被重定向到 nohup.out 文件中。一般我们可在结尾加上“&”来将命令同时放入后台运行,也可用">filename 2>&1"来更改缺省的重定向文件名。

nohup 示例
[root@blog_lxx1_com ~]# nohup scp ./www_gitos_net root@23.91.45.94:/root/ 
nohup: ignoring input and appending output to ‘nohup.out’
[root@blog_lxx1_com ~]# ps -ef | grep scp
root 14758 1 0 Jun05 ? 00:00:01 scp www_lxx1_com.tar.gz root@23.91.45.94:/data/
[root@blog_lxx1_com ~]#

2。setsid

nohup 无疑能通过忽略 HUP 信号来使我们的进程避免中途被中断,但如果我们换个角度思考,如果我们的进程不属于接受 HUP 信号的终端的子进程,那么自然也就不会受到 HUP 信号的影响了。setsid 就能帮助我们做到这一点。让我们先来看一下 setsid 的帮助信息:

SETSID(8)                 Linux Programmer’s Manual                 SETSID(8)

NAME
       setsid - run a program in a new session

SYNOPSIS
       setsid program [ arg ... ]

DESCRIPTION
       setsid runs a program in a new session.

可见 setsid 的使用也是非常方便的,也只需在要处理的命令前加上 setsid 即可

3。&

这里还有一个关于 subshell 的小技巧。我们知道,将一个或多个命名包含在“()”中就能让这些命令在子 shell 中运行中,从而扩展出很多有趣的功能,我们现在要讨论的就是其中之一。

当我们将”&”也放入“()”内之后,我们就会发现所提交的作业并不在作业列表中,也就是说,是无法通过jobs来查看的。让我们来看看为什么这样就能躲过 HUP 信号的影响吧。

subshell 示例
[root@pvcent107 ~]# (ping www.ibm.com &)
[root@pvcent107 ~]# ps -ef |grep www.ibm.com
root     16270     1  0 14:13 pts/4    00:00:00 ping www.ibm.com
root     16278 15362  0 14:13 pts/4    00:00:00 grep www.ibm.com
[root@pvcent107 ~]#

从上例中可以看出,新提交的进程的父 ID(PPID)为1(init 进程的 PID),并不是当前终端的进程 ID。因此并不属于当前终端的子进程,从而也就不会受到当前终端的 HUP 信号的影响了。

Linux 下让进程在后台可靠运行的几种方法(nohup/setsid/&),首发于科技爱好者博客

]]>
http://blog.lxx1.com/2808?pk_campaign=feed&pk_kwd=linux-%25e4%25b8%258b%25e8%25ae%25a9%25e8%25bf%259b%25e7%25a8%258b%25e5%259c%25a8%25e5%2590%258e%25e5%258f%25b0%25e5%258f%25af%25e9%259d%25a0%25e8%25bf%2590%25e8%25a1%258c%25e7%259a%2584%25e5%2587%25a0%25e7%25a7%258d%25e6%2596%25b9%25e6%25b3%2595%25ef%25bc%2588nohupsetsid%25ef%25bc%2589/feed 0
Arduino uno 驱动Nokia5110显示屏 http://blog.lxx1.com/2784?pk_campaign=feed&pk_kwd=arduino-uno-%25e9%25a9%25b1%25e5%258a%25a8nokia5110%25e6%2598%25be%25e7%25a4%25ba%25e5%25b1%258f http://blog.lxx1.com/2784?pk_campaign=feed&pk_kwd=arduino-uno-%25e9%25a9%25b1%25e5%258a%25a8nokia5110%25e6%2598%25be%25e7%25a4%25ba%25e5%25b1%258f#respond Sat, 17 Jun 2017 12:14:26 +0000 http://blog.lxx1.com/?p=2784 Arduino uno 驱动Nokia5110显示屏,首发于科技爱好者博客

在树莓派使用Nokia5110显示屏显示系统信息中,学习了使用树莓派驱动Nokia5110显示屏。本篇文章教大家用Arduino驱动Nokia5110显示屏。

Arduino uno 驱动Nokia5110显示屏,首发于科技爱好者博客

]]>
Arduino uno 驱动Nokia5110显示屏,首发于科技爱好者博客

树莓派使用Nokia5110显示屏显示系统信息中,学习了使用树莓派驱动Nokia5110显示屏。本篇文章教大家用Arduino驱动Nokia5110显示屏。

一、硬件连接

#define PIN_SCE                 7
#define PIN_RESET             6
#define PIN_DC             5
#define PIN_SDIN            4
#define PIN_SCLK                3
VCC         3.3V
Gng            地
BL            5V

在BL和5V之间连接不用加入其他的电阻和电容,经过我的测试,直接连接就可以了。

二、下载Nokia5110驱动库

1、下载Arduino Nokia5110 驱动库.(科技爱好者博客下载:pcd8544-master

2、打开Arduino IDE

3、“项目” – “加载库” -” 添加一个.zip库”。

三、运行程序

选择File > Examples > PCD8544 > HelloWorld打开Nokia 5110屏幕测试程序。编译下载即可看到显示的信息。

四、Hello Word程序代码

 
/*
 * PCD8544 - Interface with Philips PCD8544 (or compatible) LCDs.
 *
 * Copyright (c) 2010 Carlos Rodrigues <cefrodrigues@gmail.com>
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */

/*
 * To use this sketch, connect the eight pins from your LCD like thus:
 *
 * Pin 1 -> +3.3V (rightmost, when facing the display head-on)
 * Pin 2 -> Arduino digital pin 3
 * Pin 3 -> Arduino digital pin 4
 * Pin 4 -> Arduino digital pin 5
 * Pin 5 -> Arduino digital pin 7
 * Pin 6 -> Ground
 * Pin 7 -> 10uF capacitor -> Ground
 * Pin 8 -> Arduino digital pin 6
 *
 * Since these LCDs are +3.3V devices, you have to add extra components to
 * connect it to the digital pins of the Arduino (not necessary if you are
 * using a 3.3V variant of the Arduino, such as Sparkfun's Arduino Pro).
 */


#include 

// A custom glyph (a smiley)...
static const byte glyph[] = { B00010000, B00110100, B00110000, B00110100, B00010000 };


static PCD8544 lcd;


void setup() {
  // PCD8544-compatible displays may have a different resolution...
  lcd.begin(84, 48);

  // Add the smiley to position "0" of the ASCII table...
  lcd.createChar(0, glyph);
}


void loop() {
  // Just to show the program is alive...
  static int counter = 0;

  // Write a piece of text on the first line...
  lcd.setCursor(0, 0);
  lcd.print("Hello, World!");

  lcd.setCursor(0, 1);
  lcd.print("Blog.lxx1.com");
  
  // Write the counter on the second line...
  lcd.setCursor(0, 3            );
  lcd.print(counter, DEC);
  lcd.write(' ');
  lcd.write(0);  // write the smiley

  
  // Use a potentiometer to set the LCD contrast...
  // short level = map(analogRead(A0), 0, 1023, 0, 127);
  // lcd.setContrast(level);

  delay(100);
  counter+=1;
}


/* EOF - HelloWorld.ino */

Arduino uno 驱动Nokia5110显示屏,首发于科技爱好者博客

]]>
http://blog.lxx1.com/2784?pk_campaign=feed&pk_kwd=arduino-uno-%25e9%25a9%25b1%25e5%258a%25a8nokia5110%25e6%2598%25be%25e7%25a4%25ba%25e5%25b1%258f/feed 0
WordPress 博客总字数统计 http://blog.lxx1.com/2760?pk_campaign=feed&pk_kwd=wordpress-%25e5%258d%259a%25e5%25ae%25a2%25e6%2580%25bb%25e5%25ad%2597%25e6%2595%25b0%25e7%25bb%259f%25e8%25ae%25a1 http://blog.lxx1.com/2760?pk_campaign=feed&pk_kwd=wordpress-%25e5%258d%259a%25e5%25ae%25a2%25e6%2580%25bb%25e5%25ad%2597%25e6%2595%25b0%25e7%25bb%259f%25e8%25ae%25a1#respond Sat, 17 Jun 2017 01:40:01 +0000 http://blog.lxx1.com/?p=2760 WordPress 博客总字数统计,首发于科技爱好者博客

This post has . 博客是一个记录自己成长的空间,科技爱好者博客已经坚持写了快3年,写了220篇文章。Wrodpress博客在编写文章的时候,可以通过编辑框下右侧看到字数统计,但只能看到这一篇文章的,我想统计下Wrodpress博客从开博到现在发表的所有文章 ...

WordPress 博客总字数统计,首发于科技爱好者博客

]]>
WordPress 博客总字数统计,首发于科技爱好者博客

This post has 521 Words .

博客是一个记录自己成长的空间,科技爱好者博客已经坚持写了快3年,写了220篇文章。Wrodpress博客在编写文章的时候,可以通过编辑框下右侧看到字数统计,但只能看到这一篇文章的,我想统计下Wrodpress博客从开博到现在发表的所有文章以及页面的字数总计,通过搜索发现网上只有解决一篇文章的字数,而没有整个博客的字数统计。后来终于发现一款Wrodpress博客插件,可以统计Wrodpress博客整站的字数统计,这个插件就是WP Word Count

下面是WP Word Count 插件介绍以及使用。

功能

用于统计博客文章、页面和自定义文章类型的字数统计信息。

特色

1、所有内容的字数总和和单篇文章计数

快速查看你创建了多少篇文章以及博客的总字数。可以将内容按照字数从最大值到最小值进行排序。

2、每月统计及作者字数统计

查看每个月的文字总数,按文章、页面和自定义文章类型细分。博客站点上的每个作者都会进行统计发表的总字数。

3、简单的下载和设置

方便的进行安装,不需要设置就可以开始对博客的字数进行统计。

显示文章的字数统计

WP Word Count 插件还可以方便的显示本篇文章的字数统计,要显示也很简单,只需要添加“ [/wpwordcount/] ”段代码就可以显示这篇文章的字数(去掉两个/),你可以将这个短代码加入到文章中去,从而让读者知道本篇文章的字数。

例如,文章开头的字数统计就是这么添加的:

This post has [/wpwordcount/] .#去掉两个/

WordPress 博客总字数统计,首发于科技爱好者博客

]]>
http://blog.lxx1.com/2760?pk_campaign=feed&pk_kwd=wordpress-%25e5%258d%259a%25e5%25ae%25a2%25e6%2580%25bb%25e5%25ad%2597%25e6%2595%25b0%25e7%25bb%259f%25e8%25ae%25a1/feed 0
Arduino呼吸灯实验 http://blog.lxx1.com/2755?pk_campaign=feed&pk_kwd=arduino%25e5%2591%25bc%25e5%2590%25b8%25e7%2581%25af%25e5%25ae%259e%25e9%25aa%258c http://blog.lxx1.com/2755?pk_campaign=feed&pk_kwd=arduino%25e5%2591%25bc%25e5%2590%25b8%25e7%2581%25af%25e5%25ae%259e%25e9%25aa%258c#respond Mon, 12 Jun 2017 11:15:56 +0000 http://blog.lxx1.com/?p=2755 Arduino呼吸灯实验,首发于科技爱好者博客

在Ardiuno第一个程序:点亮LED灯 中,我们通过Arduino控制LED灯的亮灭,现在,我们制作一个Arduino呼吸灯,使得LED灯的亮度逐渐变化。本文使用analogWrite()函数输出PWM波来制作一个带呼吸效果的LED灯。

Arduino呼吸灯实验,首发于科技爱好者博客

]]>
Arduino呼吸灯实验,首发于科技爱好者博客

在Ardiuno第一个程序:点亮LED灯 中,我们通过Arduino控制LED灯的亮灭,现在,我们制作一个Arduino呼吸灯,使得LED灯的亮度逐渐变化。本文使用analogWrite()函数输出PWM波来制作一个带呼吸效果的LED灯。

一、需要的材料

Arduino UNO 一个;

LED灯一个;

220欧姆电阻一个;

面包板一块;

公对公杜邦线2条。

二、电路原理图

Arduino呼吸灯实验的电路原理图如下:

LED灯的一个引脚连接到了带PWM功能的D9引脚上,同时将LED灯与一个220欧姆的电阻串起来的原因是为了保护Arduino,如果没有这个电阻,由于LED灯的电阻过小,导致流过Arduino的电流很大,可能会烧坏Arduino。

三、连接示意图

Arduino呼吸灯实验的电路连接图如下:

四、Arduino呼吸灯程序

Arduino呼吸灯实验的程序如下:

 
int ledPin=9;

void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:
  
for(int fadevalue=0;fadevalue<=255;fadevalue+=3)
{ 
  analogWrite(ledPin,fadevalue); 
  delay(30); 
} 

for(int fadevalue=255;fadevalue>=0;fadevalue-=3){
  analogWrite(ledPin,fadevalue);
  delay(30);
  }  

}

下载程序到Arduino上,可以观察到Arduino上的板载LED灯由灭逐渐变亮,接着又逐渐熄灭,这样一直循环。通过改变delay()的值,可以改变呼吸灯的频率。


Arduino呼吸灯实验,首发于科技爱好者博客

]]>
http://blog.lxx1.com/2755?pk_campaign=feed&pk_kwd=arduino%25e5%2591%25bc%25e5%2590%25b8%25e7%2581%25af%25e5%25ae%259e%25e9%25aa%258c/feed 0
计算机通过串口连接Arduino控制LED灯 http://blog.lxx1.com/2748?pk_campaign=feed&pk_kwd=%25e8%25ae%25a1%25e7%25ae%2597%25e6%259c%25ba%25e9%2580%259a%25e8%25bf%2587%25e4%25b8%25b2%25e5%258f%25a3%25e8%25bf%259e%25e6%258e%25a5arduino%25e6%258e%25a7%25e5%2588%25b6led%25e7%2581%25af http://blog.lxx1.com/2748?pk_campaign=feed&pk_kwd=%25e8%25ae%25a1%25e7%25ae%2597%25e6%259c%25ba%25e9%2580%259a%25e8%25bf%2587%25e4%25b8%25b2%25e5%258f%25a3%25e8%25bf%259e%25e6%258e%25a5arduino%25e6%258e%25a7%25e5%2588%25b6led%25e7%2581%25af#respond Mon, 12 Jun 2017 10:43:17 +0000 http://blog.lxx1.com/?p=2748 计算机通过串口连接Arduino控制LED灯,首发于科技爱好者博客

本实验将完成简单的串口控制功能,即使用计算机发送串口指令来实现开关Arduino上的板载LED灯。 程序中使用Serial. read()语句接收数据并进行判断,当接收到的数据为“o”时,便点亮LED,并输出提示;当为“f”时,便关闭LED,并输出提示。Arduino串口的接收 ...

计算机通过串口连接Arduino控制LED灯,首发于科技爱好者博客

]]>
计算机通过串口连接Arduino控制LED灯,首发于科技爱好者博客

本实验将完成简单的串口控制功能,即使用计算机发送串口指令来实现开关Arduino上的板载LED灯。 程序中使用Serial. read()语句接收数据并进行判断,当接收到的数据为“o”时,便点亮LED,并输出提示;当为“f”时,便关闭LED,并输出提示。Arduino串口的接收和输出使用请参考这篇文章:Arduino通过串口与计算机交流 。

示例代码如下:


int ledPin=13;

void setup() {
  // put your setup code here, to run once:
  
Serial.begin(9600);
pinMode(ledPin,OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  
if(Serial.available()>0){
  char ch=Serial.read();
  if(ch == 'o'){
    digitalWrite(ledPin,HIGH);
    Serial.println("LED ON!");
    }
  if(ch == 'f'){
    digitalWrite(ledPin,LOW);
    Serial.println("LED OFF!");
    }
  }
}

下载程序到Arduino开发板上,打开串口监视器,输入’o’并发送,可以看到串口输出“LED ON! ”,并且Arduino的板载LED灯亮;再次输入’f’,串口输出“LED OFF! ”,并且Arduino的板载LED灯熄灭。


计算机通过串口连接Arduino控制LED灯,首发于科技爱好者博客

]]>
http://blog.lxx1.com/2748?pk_campaign=feed&pk_kwd=%25e8%25ae%25a1%25e7%25ae%2597%25e6%259c%25ba%25e9%2580%259a%25e8%25bf%2587%25e4%25b8%25b2%25e5%258f%25a3%25e8%25bf%259e%25e6%258e%25a5arduino%25e6%258e%25a7%25e5%2588%25b6led%25e7%2581%25af/feed 0
Arduino通过串口与计算机交流 http://blog.lxx1.com/2741?pk_campaign=feed&pk_kwd=arduino%25e9%2580%259a%25e8%25bf%2587%25e4%25b8%25b2%25e5%258f%25a3%25e4%25b8%258e%25e8%25ae%25a1%25e7%25ae%2597%25e6%259c%25ba%25e4%25ba%25a4%25e6%25b5%2581 http://blog.lxx1.com/2741?pk_campaign=feed&pk_kwd=arduino%25e9%2580%259a%25e8%25bf%2587%25e4%25b8%25b2%25e5%258f%25a3%25e4%25b8%258e%25e8%25ae%25a1%25e7%25ae%2597%25e6%259c%25ba%25e4%25ba%25a4%25e6%25b5%2581#respond Mon, 12 Jun 2017 09:45:04 +0000 http://blog.lxx1.com/?p=2741 Arduino通过串口与计算机交流,首发于科技爱好者博客

Arduino上与计算机通信最常用的方式就是串口通信,本文讲解下Arduino下使用串口以及使用串口接收发、发送数据。

Arduino通过串口与计算机交流,首发于科技爱好者博客

]]>
Arduino通过串口与计算机交流,首发于科技爱好者博客

Arduino上与计算机通信最常用的方式就是串口通信,本文讲解下Arduino下使用串口以及使用串口接收发、发送数据。

在Arduino控制器上,串口都是位于0 (RX)和1 (TX)的两个引脚, Arduino 的USB口通过一个转换芯片(通常为ATmega16 u2)与这两个串口引脚连接。该转换芯片会通过USB接口在计算机上虚拟出一个用于与Arduino通信的串口。

当Arduino控制器使用USB线与计算机相连时,两者之间便建立了串口连接。通过此连接,Arduino控制器可与计算机相互传数据了。

Arduino中与串口相关的函数有Serial. begin()、Serial.available()、Serial.read()、Serial.println()和Serial.print()这五个函数;下面分别介绍如何使用串口。

一、串口初始化

要想使串口与计算机通信,需要先使用Serial. begin()函数初始化Arduino的串口通信功能,即 Serial.begin(speed); 其中参数speed指串口通信波特率,它是设定串口通信速率的参数。串口通信的双方必须使用同样的波特率方能正常进行通信。波特率可以设置为300、600、1200、2400、4800、9600、14400等,波特率越大,串口通信的速率也就越高。常用的波特率为9600。

二、串口输出

串口初始化完毕后,便可以使用Serial.print()Serial.println()函数向计算机发送数据了。函数的用法是:

  • Serial.print(val);   其中val为要输出的信息,各种类型的数据即可。
  • Serial.println(val);   与Serial.print()类似,不同的是Serial.println()函数会在输出指定数据后,再输出一组回车换行符。

串口输出示例程序:

int counter = 0;
void setup() {
  // put your setup code here, to run once:

Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:

counter = counter + 1;
Serial.print(counter);
Serial.print(':');
Serial.println(" Hell World!");
delay(100);
}

下载程序到Arduino开发板,点开IDE右上角的窗口监视器,就可以看到串口的输出信息了。如下图:

三、串口接收数据

使用串口同样可以接收由计算机发出的数据。接收串口数据需要使用Serial. read()函数,用法是:

Serial.read();

调用该语句,每次都会返回1字节的数据,该返回值便是当前串口读到的数据。

使用串口时,Arduino会在SRAM中开辟一段大小为64 B的空间,串口接收到的数据都会被暂时存放在该空间中,称这个存储空间为缓冲区。使用Serial.available()函数检测缓冲区是否有可读数据,该函数的用法是:

Serial.available();

Serial.available()函数的返回值是当前缓冲区中接收到的数据字节数。在使用时,先检测缓冲区中是否有可读的数据,如果有,则使用Serial. read()函数读取,没有则跳过或者等待再读取。

串口读数据的示例程序如下:

void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
if(Serial.available()>0){
  char ch=Serial.read();
  Serial.print(ch);
  }
}

程序下载到Arduino后,打开串口监视器,键入并发送任何信息,则会看到Arduino接收该信息,并且将同样的信息通过串口输出。


Arduino通过串口与计算机交流,首发于科技爱好者博客

]]>
http://blog.lxx1.com/2741?pk_campaign=feed&pk_kwd=arduino%25e9%2580%259a%25e8%25bf%2587%25e4%25b8%25b2%25e5%258f%25a3%25e4%25b8%258e%25e8%25ae%25a1%25e7%25ae%2597%25e6%259c%25ba%25e4%25ba%25a4%25e6%25b5%2581/feed 0
Arduino 点亮RGB彩色流水灯 http://blog.lxx1.com/2734?pk_campaign=feed&pk_kwd=arduino-%25e7%2582%25b9%25e4%25ba%25aergb%25e5%25bd%25a9%25e8%2589%25b2%25e6%25b5%2581%25e6%25b0%25b4%25e7%2581%25af http://blog.lxx1.com/2734?pk_campaign=feed&pk_kwd=arduino-%25e7%2582%25b9%25e4%25ba%25aergb%25e5%25bd%25a9%25e8%2589%25b2%25e6%25b5%2581%25e6%25b0%25b4%25e7%2581%25af#respond Sun, 11 Jun 2017 07:27:12 +0000 http://blog.lxx1.com/?p=2734 Arduino 点亮RGB彩色流水灯,首发于科技爱好者博客

在 Ardiuno第一个程序:点亮LED灯  中,介绍了用Arduino 进行开发的步骤以及如何点亮一个LED灯;本篇文章在上一篇的基础上教大家在Arduino uno R3上点亮一个6位的RGB彩色流水灯。

Arduino 点亮RGB彩色流水灯,首发于科技爱好者博客

]]>
Arduino 点亮RGB彩色流水灯,首发于科技爱好者博客

Ardiuno第一个程序:点亮LED灯  中,介绍了用Arduino 进行开发的步骤以及如何点亮一个LED灯;本篇文章在上一篇的基础上教大家在Arduino uno R3上点亮一个6位的RGB彩色流水灯。

实验的效果是6个RGB彩色流水灯依次点亮,颜色变化依次为:红色-绿色-蓝色-白色-黄色-青色,如下图。

Arduino点亮RGB彩色LED流水灯
有个实验的小视频,也可以看下效果:

一、准备材料

Arduino uno R3 开发板:1

杜邦线:10

RGB彩色流水灯模块:1

二、原理介绍

树莓派GPIO控制RGB彩色LED灯中,介绍了RGB彩色流水灯的原理以及点亮一个LED灯的方法。本篇文章,我们用代码实现依次点亮LED灯,在点亮的同时,改变RGB的输出值,就可以改变RGB灯显示的颜色,从而实现彩色的流水灯。

硬件使用了一个RGB彩色流水灯模块,模块上集成了8个共阳RGB彩色LED灯,使用时只需要将模块上的引脚接到Arduino uno R3开发板上即可,不用自己连接电阻,方便了使用。要注意的是,由于我杜邦线不够,所以就只是用了模块上的6个RGB灯。如果你要控制8个RGB灯,你应该修改我使用的代码。

Arduino控制RGB彩色灯就需要使用PWM输出,本文使用analogWrite函数来产生PWM。脉宽调制(PWM)是一种用数字手段获得模拟结果的技术。数字控制用于产生方波,信号在只能在开与关之间切换。这种开关模式通过改变高电平持续时间与低电平持续时间比值,可以模拟在开(5伏)和关闭(0伏)之间的任一模拟电压。高电平持续时间称为为脉冲宽度。为了获得不同的模拟值,可以改变或调整脉冲宽度。

analogWrite(pin, val)命令:其中pin是引脚的编号,在uno R3上只能使用3,5,6,9,10,11这几个引脚;val是0~255的整数值,对应电压从0到+5V,不同的值对应不同的占空比,通过控制占空比从而模拟出不同的模拟电压值,实现PWM控制。不同的值对应的占空比如下:

产生PWM的示例代码:


int pin = 11; //可以选择3,5,6,9,10,11

void setup()
{
    pinMode(pin, OUTPUT);
}   

void loop()
{
    analogWrite(pin, 127);
    delay(500);
}

这种方式产生的方波周期大概是2ms左右(490Hz),占空比位50%,产生方波不需要占用额外的cpu命令时间。

三、硬件连接

RGB彩色流水灯模块的引脚与UNO的连接对应关系如下:

RGB LED ———— Arduino UNO R3

R ————9

G ———— 11

B ————10

VCC —— 5V

D0————2

D1————3

D2 ———— 4

D3 ———— 5

D4 ———— 6

D5 ———— 7

四、流水灯代码

点亮6个RGB彩色流水灯的代码如下,颜色变化顺序为:红色-绿色-蓝色-白色-黄色-青色


/*
 * 作者:科技爱好者博客
 * 时间:2017年6月11日12:46:41
 * IDE版本号:1.8.2
 * 发布地址:http://blog.lxx1.com
 * 作用:共阳RGB流水灯循环点亮
*/

//定义RGB灯颜色控制引脚
int R=9;
int G=11;
int B=10;

int t=1000; //延时时间控制

void setup() {
  // put your setup code here, to run once:
  
for(int i=2;i<8;i++){
  pinMode(i,OUTPUT);
  }
pinMode(R,OUTPUT);
pinMode(G,OUTPUT);
pinMode(B,OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:

//从左到右点亮RGB流水灯  
for(int i=2;i<7;i++){ digitalWrite(i,0); color(i); digitalWrite(1,1); } //从右到左熄灭RGB流水灯 for(int i=7;i>2;i--){
  digitalWrite(i,0);
  color(i);
  digitalWrite(i,1);
  }
  
}

//颜色控制函数
void setColor(int r,int g,int b){
  analogWrite(R,255-r);
  analogWrite(G,255-g);
  analogWrite(B,255-b);
  }

//选择要显示的颜色
void color(int c){
  switch(c){
    case 2:
      setColor(255, 0, 0);  // 红色灯全亮,蓝灯,绿灯全暗(红色)
      delay(t);
      break;
      
      case 3:
      setColor(0, 255, 0);  // 绿色灯全亮,红灯,蓝灯全暗(绿色)
      delay(t);
      break;

      case 4:
      setColor(0, 0, 255);  // 蓝色灯全亮,红灯,绿灯全暗(蓝色)
      delay(t);
      break;

      case 5:
      setColor(255, 255, 255);  // 红灯,绿灯,蓝灯全亮(白色)
      delay(t);
      break;

      case 6:
      setColor(255, 255, 0);  // 红灯,绿灯全亮,蓝灯全暗(黄色)
      delay(t);
      break;

      case 7:
      setColor(0, 255, 255);  // 绿灯,蓝灯全亮,红灯全暗(青色)
      delay(t);
      break;  
    }
  }

Arduino 点亮RGB彩色流水灯,首发于科技爱好者博客

]]>
http://blog.lxx1.com/2734?pk_campaign=feed&pk_kwd=arduino-%25e7%2582%25b9%25e4%25ba%25aergb%25e5%25bd%25a9%25e8%2589%25b2%25e6%25b5%2581%25e6%25b0%25b4%25e7%2581%25af/feed 0
Ardiuno第一个程序:点亮LED灯 http://blog.lxx1.com/2726?pk_campaign=feed&pk_kwd=ardiuno%25e7%25ac%25ac%25e4%25b8%2580%25e4%25b8%25aa%25e7%25a8%258b%25e5%25ba%258f%25ef%25bc%259a%25e7%2582%25b9%25e4%25ba%25aeled%25e7%2581%25af http://blog.lxx1.com/2726?pk_campaign=feed&pk_kwd=ardiuno%25e7%25ac%25ac%25e4%25b8%2580%25e4%25b8%25aa%25e7%25a8%258b%25e5%25ba%258f%25ef%25bc%259a%25e7%2582%25b9%25e4%25ba%25aeled%25e7%2581%25af#respond Sun, 11 Jun 2017 07:11:34 +0000 http://blog.lxx1.com/?p=2726 Ardiuno第一个程序:点亮LED灯,首发于科技爱好者博客

本文章介绍Arduino的第一个程序 ,通过点亮Arduino uno R3上板载的LED灯来示例编写、上传程序的过程。

Ardiuno第一个程序:点亮LED灯,首发于科技爱好者博客

]]>
Ardiuno第一个程序:点亮LED灯,首发于科技爱好者博客

本文章介绍Arduino的第一个程序 ,通过点亮Arduino uno R3上板载的LED灯来示例编写、上传程序的过程。

一、安装Arduino IDE。

Arduino IDE用来编写、编译、上传Arduino程序,还带有一个串口监视器,用来查看串口输出信息。

下载地址:

在工具栏上,Arduino IDE提供了常用功能的快捷键:

  • 校验(Verify) ,验证程序是否编写无误,若无误则编译该项目。
  • 下载(Upload) ,下载程序到Arduino控制器上。
  • 新建(New) ,新建一个项目。
  • 打开(Open) ,打开一个项目。
  • 保存(Save) ,保存当前项目。
  • 串口监视器(Serial Monitor),IDE自带的一个简单的串口监视器程序,用它可以查看串口发送或接收到的数据。 相对于IAR、Keil等专业的硬件开发环境,Arduino的开发环境给人以简单明了的感觉,但正是这种简单,省去了很多不常用的功能,使得基础知识不多的使用者更容易上手。

如果使用的是Arduino UNO、Arduino MEGA r3、Arduino Leonardo或者这些型号对应的兼容控制器,并且计算机系统为Mac OS或者Linux,那么只需要使用USB连接线,并插上Arduino控制器,系统会自动安装驱动,安装完成后即可使用。 其他型号的控制器或者Windows系统则需要手工安装驱动程序。

二、原理介绍

数字信号是以0、1表示的不连续信号,也就是以二进制形式表示的信号。在Arduino中数字信号用高低电平来表示,高电平为数字信号1 ,低电平为数字信号0。 Arduino上每一个带有数字编号的引脚都是数字引脚,包括写有“A”编号的模拟输入引脚。使用这些引脚可以完成输入/输出数字信号的功能。

在使用输入或输出功能前,需要先通过pinMode ()函数配置引脚的模式为输入模式或输出模式,即 pinMode(pin, mode); 其中参数pin为指定配置的引脚编号,参数mode为指定的配置模式。如之前在Blink程序中使用到的pinMode(13, OUTPUT)语句,就是把13号引脚配置为输出模式。 配置为输出模式以后,还需要使用digitalWrite ()函数使该引脚输出高电平或低电平。其调用形式为: digitalWrite(pin, value); 其中参数pin为指定输出的引脚编号。参数value为要指定的输出电平,使用HIGH指定输出高电平,使用LOW指定输出低电平。 Arduino中输出的低电平为0 V,输出的高电平为当前Arduino的工作电压,例如UNO的工作电压为5 V,则其高电平输出也是5 V。

数字引脚除了用于输出信号外,还可用digitalRead ()函数读取外部输入的数字信号,其调用形式为: digitalRead(pin); 其中参数pin为指定读取状态的引脚编号。 当Arduino以5 V供电时,会将范围为-0 . 5~1 . 5 V的输入电压作为低电平识别,而将范围在3~5. 5 V的输入电压作为高电平识别。所以,即使输入电压不太准确,Arduino也可以正常识别。需要注意的是,过高的输入电压会损坏Arduino。

板载的LED灯阳极连接到了Arduino的第13号引脚上,将13号引脚输出高电平,即可点亮LED灯;如果再设置位低电平,就可以熄灭LED灯。

三、代码

在Arduino 窗口中可以选择“文件”→“示例”→01 . Basics→Blink菜单项打开要使用的例程。

程序如下。

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}

在Blink程序中,使用“LED_BUILTIN”则可代表对应编号的引脚(或者是该引脚上连接的设备)。也可以使用int LED=13来定义LED对应来连接的引脚,这种写法可以提高程序的可读性,并且便于修改,若设备需要更换连接引脚,则直接修改该变量对应的数值即可。也可使用#define语句,以定义常量的方式来为设备设置一个别名。 delay()为毫秒延时函数,delay(1000)即延时1 秒(1 000 毫秒),在本程序中用来控制开关LED的间隔时间。其中的参数可以自行修改,以便观察实际运行效果。

四、编译下载

在编译或下载该程序之前,需要先在“工具”→“板卡”菜单中选择正在使用的Arduino控制器型号,如下图所示。

接着在“工具”→“端口”菜单中选择Arduino控制器对应的串口。在Windows系统中,串口名称为“COM”加数字编号,如COM3。在选择串口时,需要查看设备管理器中所选Arduino控制器对应的串口号。 在Mac OS或者Linux中,串口名称一般为 /dev/tty. usbmodem加数字编号或/dev/cu. usbmodem加数字编号。 板卡和串口设置完成后,就可以在IDE的右下角看到当前设置的Arduino控制器型号及对应串口了。windows下选择选择开发板所在的串口,如下图所示:

接着单击校验(Verify)工具按钮,IDE会自动检测程序是否正确,如果程序无误,则调试提示区会依次显示“编译程序中”和“编译完毕”。并显示:

项目使用了 928 字节,占用了 (2%) 程序存储空间。最大为 32256 字节。
全局变量使用了9字节,(0%)的动态内存,余留2039字节局部变量。最大为2048字节。

在上图中,“928字节”为当前程序编译后的大小,“最大32 ,256字节”表示当前控制器可使用的Flash程序存储空间的大小。如果程序有误,则调试提示区会显示相关错误提示。

单击下载(Upload)工具按钮,调试提示区会显示“编译程序中”,很快该提示会变成“下载中”,此时Arduino控制器上标有TX、RX的两个LED会快速闪烁,这说明当前程序正在被写入Arduino控制器中。 当显示“下载完毕”时,就可以看到该段程序的效果了——板子上标有L的LED灯正在按照亮1秒灭1秒的间隔闪烁。


Ardiuno第一个程序:点亮LED灯,首发于科技爱好者博客

]]>
http://blog.lxx1.com/2726?pk_campaign=feed&pk_kwd=ardiuno%25e7%25ac%25ac%25e4%25b8%2580%25e4%25b8%25aa%25e7%25a8%258b%25e5%25ba%258f%25ef%25bc%259a%25e7%2582%25b9%25e4%25ba%25aeled%25e7%2581%25af/feed 0
arduino uno R3 硬件参数介绍 http://blog.lxx1.com/2718?pk_campaign=feed&pk_kwd=arduino-uno-r3-%25e7%25a1%25ac%25e4%25bb%25b6%25e5%258f%2582%25e6%2595%25b0%25e4%25bb%258b%25e7%25bb%258d http://blog.lxx1.com/2718?pk_campaign=feed&pk_kwd=arduino-uno-r3-%25e7%25a1%25ac%25e4%25bb%25b6%25e5%258f%2582%25e6%2595%25b0%25e4%25bb%258b%25e7%25bb%258d#respond Sat, 10 Jun 2017 13:48:34 +0000 http://blog.lxx1.com/?p=2718 arduino uno R3 硬件参数介绍,首发于科技爱好者博客

在Arduino 介绍中,我们了解了Arduino的由来,硬件特点和软件介绍。在这篇文章中,我们介绍下Arduino中使用最广泛的一款开发板:Arduino uno R3。它基于ATmega328的单片机板,Arduino uno R3共有14个数字I/O端口(其中六个可以做PWM输出),6个模拟端口, ...

arduino uno R3 硬件参数介绍,首发于科技爱好者博客

]]>
arduino uno R3 硬件参数介绍,首发于科技爱好者博客

Arduino 介绍中,我们了解了Arduino的由来,硬件特点和软件介绍。在这篇文章中,我们介绍下Arduino中使用最广泛的一款开发板:Arduino uno R3。它基于ATmega328的单片机板,Arduino uno R3共有14个数字I/O端口(其中六个可以做PWM输出),6个模拟端口,一个16MHz晶体振荡器,一个USB接口,一个DC电源插座,一个ICSP header和一个复位按钮。

一、详细参数

微处理器 ATmega328P
工作电压 5V
输入电压(推荐) 7-12V
输入电压(限值) 6-20V
数字输入/输出引脚 14路(其中6路可用于PWM输出)
PWM数字I/ O引脚 6
模拟输入引脚 6
每路输入/输出引脚的直流电流 20 mA
3.3V引脚的直流电流 50 mA
闪存存储器 32KB,其中引导程序占用0.5KB
SRAM 2 KB (ATmega328P)
EEPROM 1 KB (ATmega328P)
时钟频率 16 MHz
长度 68.6 mm
宽度 53.4 mm
重量 25 g

详细介绍

1、电源(Power)

Arduino UNO有三种供电方式:

  • 通过USB接口供电,电压为5 V;
  • 通过DC电源输入接口供电,电压要求7~12 V;
  • 通过电源接口处5 V或者VIN端口供电,5 V端口处供电必须为5 V,VIN端口处供电为7~12 V。

2、指示灯(LED)

Arduino UNO带有4个LED指示灯,作用分别是:

  • ON,电源指示灯。当Arduino通电时,ON灯会点亮。
  • TX,串口发送指示灯。当使用USB连接到计算机且Arduino向计算机传输数据时,TX灯会点亮。
  • RX,串口接收指示灯。当使用USB连接到计算机且Arduino接收到计算机传来的数据时,RX灯会点亮。
  • L,可编程控制指示灯。该LED通过特殊电路连接到Arduino的13 号引脚,当13号引脚为高电平或高阻态时,该LED 会点亮;当为低电平时,不会点亮。因此可以通过程序或者外部输入信号来控制该LED的亮灭。

3、复位按键(Reset Button)

按下该按键可以使Arduino重新启动,从头开始运行程序。

4、存储空间(Memory)

Arduino的存储空间即是其主控芯片所集成的存储空间。也可以通过使用外设芯片的方式来扩展Arduino的存储空间。

Arduino UNO的存储空间分三种:

  • Flash,容量为32 KB。其中0. 5 KB作为BOOT区用于储存引导程序,实现通过串口下载程序的功能;另外的31 . 5 KB作为用户储存程序的空间。相对于现在动辄几百GB的硬盘,可能觉得32 KB太小了,但是在单片机上,32 KB已经可以存储很大的程序了。
  • SRAM,容量为2 KB。SRAM相当于计算机的内存,当CPU进行运算时,需要在其中开辟一定的存储空间。当Arduino 断电或复位后,其中的数据都会丢失。 EEPROM,容量为1 KB。
  • EEPROM的全称为电可擦写的可编程只读存储器,是一种用户可更改的只读存储器,其特点是在Arduino断电或复位后,其中的数据不会丢失。

5、输入/ 输出端口(Input/Output Port)

Arduino UNO有14个数字输入/输出端口,6个模拟输入端口。其中一些带有特殊功能,这些端口如下:

  • UART通信,为0(RX)和1(TX)引脚,被用于接收和发送串口数据。这两个引脚通过连接到ATmega16 U2来与计算机进行串口通信。 外部中断,为2和3引脚,可以输入外部中断信号。
  • PWM输出,为3、5、6、9、10和11引脚,可用于输出PWM波。 SPI通信,为10 (SS)、11 (MOSI)、12 (MISO)和13 (SCK)引脚,可用于 SPI通信。
  • TWI通信,为A4 (SDA)、A5 (SCL)引脚和TWI接口,可用于TWI通信,兼容IIC通信。
  • AREF,模拟输入参考电压的输入端口。
  • Reset,复位端口。接低电平会使Arduino复位。当复位键被按下时,会使该端口接到低电平,从而使Arduino复位。

Arduino资源

Arduino uno R3官方介绍:https://www.arduino.cc/en/Main/ArduinoBoardUno

Arduino uno R3原理图:https://www.arduino.cc/en/uploads/Main/arduino_Uno_Rev3-02-TH.zip

Arduino uno R3电路图:Arduino_Uno_Rev3-schematic

ATmega168/328-Arduino Pin Mapping:https://www.arduino.cc/en/Hacking/PinMapping168


arduino uno R3 硬件参数介绍,首发于科技爱好者博客

]]>
http://blog.lxx1.com/2718?pk_campaign=feed&pk_kwd=arduino-uno-r3-%25e7%25a1%25ac%25e4%25bb%25b6%25e5%258f%2582%25e6%2595%25b0%25e4%25bb%258b%25e7%25bb%258d/feed 0