标签 WiFi 下的文章

曾经在“闲鱼”(淘宝二手)上看到有人卖NodeMCU的开发板,查了发现这东西很便宜(30RMB以下可以买到),而且自带WiFi,非常适合打开“物联网”的大门。直到前几天,跟经理说起关于怎样控制窗户的开关,才又提起这个,并买了个来玩。

详细介绍
ESP8266使用
http://suda-morris.github.io/blog/2015/12/06/esp8266/

针脚定义
NodeMCU Pin Map
请输入图片描述

官方文档
NodeMCU的API文档(英文) http://nodemcu.readthedocs.org/en/dev/

入门教程
官方网站(http://www.nodemcu.com/)上没有找到官方的入门教程,但是找这一些比较好的:
1)一个比较全面的教程(针对Windows) http://nodemcu-dev.doit.am/
2)NodeMCU 物联网开发快速上手(适合Linux用户) http://tinylab.org/nodemcu-kickstart/

官方论坛(http://bbs.nodemcu.com/)上也有一个系列的入门教程:
NodeMcu介绍:(一) 概述 http://bbs.nodemcu.com/t/nodemcujie-shao-gai-shu/25
NodeMcu介绍:(二)固件烧写 http://bbs.nodemcu.com/t/nodemcu/22
NodeMcu介绍:(三)启动文件init.lua http://bbs.nodemcu.com/t/nodemcu-init-lua/24
NodeMcu介绍:(四)下载*.lua文件 http://bbs.nodemcu.com/t/nodemcu-lua/26

Lua语言介绍
关于NodeMCU上使用的Lua,这里有个不错的教程
https://moonbingbing.gitbooks.io/openresty-best-practices/content/lua/main.html

入手Raspberry Pi Model B (512MB) 已经一段时间了。装上官方的Raspbian,感觉跟手头上的AO522没区别。同样是基于Debian,同样是LXDE桌面。也试了下Xbian (XMBC + Raspbian),感觉非常棒,只是菜单操作有点卡。可惜手上的SD卡空间不够大,否则,还可以玩玩Android。

玩过后,正是按计划进行。首先是作为无线路由来使用。其实就跟Lubuntu共享WiFi一样,测试过程中,还改良了一下以前写的sharewifi脚本(以前的版本:http://www.foxail.org/blog/?p=490)。但是还有一个问题,执行该脚本的stop操作后,系统不会把建立的mon.wlan0接口关闭,需要重启系统,wifi才能从共享模式变成正常的接收模式。

1)sharewifi脚本,设置共享wifi,我放在/opt下,内容如下:(首先要安装hostapd和dnsmasq,执行sudo apt-get install hostapd dnsmasq即可)

### begin the file /opt/sharewifi #########################################
#!/bin/sh

# Setup wireless AP, share the Internet from interface0 to interface1
# USAGE: sharewifi [ start | stop ] interface0 interface1
# EXAMPLE: sharewifi start wlan1 wlan0

help( )
{
    cat << HELP
    Setup wireless AP, share the Internet from interface0 to interface1
    USAGE: sharewifi [ help | start | stop ] interface0 interface1
    EXAMPLE: sharewifi start wlan1 wlan0

    List clients:
    cat /var/lib/misc/dnsmasq.leases
    HELP
    exit 0
}

start( )
{
    echo Starting share wifi ......
    echo Share Internet $port_in to $port_out

    # Configure iptable rules
    iptables -F
    iptables -t nat -A POSTROUTING -s $ip_prefix.0/24 -o $port_in -j MASQUERADE
    iptables -A FORWARD -s $ip_prefix.0/24 -o $port_in -j ACCEPT
    iptables -A FORWARD -d $ip_prefix.0/24 -m conntrack --ctstate ESTABLISHED,RELATED -i $port_in -j ACCEPT

    # Log the message of route
    #iptables -A INPUT -m conntrack --ctstate NEW -p tcp --dport 80 -j LOG --log-prefix "NEW_HTTP_CONN: "

    # Save iptable rules
    sh -c "iptables-save > /etc/iptables.rules"

    # Configure hostapd
    hostapd_conf=/etc/hostapd/hostapd.conf
    [ -f $hostapd_conf ] && rm $hostapd_conf
    echo >> $hostapd_conf interface=$port_out
    echo >> $hostapd_conf driver=nl80211
    echo >> $hostapd_conf ssid=foxrpi-ap
    echo >> $hostapd_conf channel=1
    echo >> $hostapd_conf hw_mode=g
    echo >> $hostapd_conf auth_algs=1
    echo >> $hostapd_conf wpa=3
    echo >> $hostapd_conf wpa_passphrase=1234567890
    echo >> $hostapd_conf wpa_key_mgmt=WPA-PSK
    echo >> $hostapd_conf wpa_pairwise=TKIP CCMP
    echo >> $hostapd_conf rsn_pairwise=CCMP
    chmod 755 $hostapd_conf

    # Configure /etc/dnsmasq.conf
    dnsmasq_conf=/etc/dnsmasq.conf
    [ -f $dnsmasq_conf ] && rm $dnsmasq_conf
    echo >> $dnsmasq_conf interface=$port_out
    echo >> $dnsmasq_conf bind-interfaces #这个是只监听wlan0,没有之会检测所有卡
    echo >> $dnsmasq_conf except-interface=lo
    echo >> $dnsmasq_conf dhcp-range=$ip_prefix.10,$ip_prefix.110,6h #设置dhcp地址范
    chmod 755 $dnsmasq_conf

    # Enable routing
    sysctl net.ipv4.ip_forward=1

    #killall named
    /etc/init.d/hostapd stop
    ifconfig $port_out $ip_prefix.1
    hostapd -B $hostapd_conf
    /etc/init.d/dnsmasq restart

    echo Sucess share wifi

    exit 0
}

stop( )
{
    echo Stopping share wifi ......
    echo Stop share Internet $port_in to $port_out

    # Configure iptable rules
    iptables -F

    # Log the message of route
    #iptables -A INPUT -m conntrack --ctstate NEW -p tcp --dport 80 -j LOG --log-prefix "NEW_HTTP_CONN: "

    # Save iptable rules
    sh -c "iptables-save > /etc/iptables.rules"

    # Configure hostapd
    hostapd_conf=/etc/hostapd/hostapd.conf
    [ -f $hostapd_conf ] && rm $hostapd_conf

    # Configure /etc/dnsmasq.conf
    dnsmasq_conf=/etc/dnsmasq.conf
    [ -f $dnsmasq_conf ] && rm $dnsmasq_conf

    # Enable routing
    sysctl net.ipv4.ip_forward=0

    #killall named
    /etc/init.d/hostapd stop
    /etc/init.d/dnsmasq stop
    ifconfig $port_out down
    ifconfig $port_out del $ip_prefix.1
    ifconfig $port_out up

    echo Sucess stop share wifi

    exit 0
}

ip_prefix=192.168.23 #wifi路由所用网段

#port_in is the network interface which connected to Internet, and default wlan1.
port_in=wlan1

#port_out is the network interface which will be setup AP, and default wlan0.
port_out=wlan0

if [ -n "$2" ]; then
    port_in=$2

    if [ -n "$3" ]; then
        port_out=$3
    fi
fi

case "$1" in
"help" )
    help ;;
"start" )
    start ;;
"stop" )
    stop ;;
*)
    help ;;
esac
### end the file /opt/sharewifi #########################################

2)设置开机自动启动,先编写开机启动的脚本。在/etc/init.d下建立文件sharewifi,文件内容如下:

### begin the file /etc/init.d/sharewifi ######################################### 
#!/bin/sh 
### BEGIN INIT INFO # Provides: sharewifi 
# Required-Start: $syslog 
# Required-Stop: $syslog 
# Default-Start: 2 3 4 5 
# Default-Stop: 0 1 6 
# Short-Description: starts the Wireless AP server 
# Description: starts the Wireless AP using start-stop-daemon 
### END INIT INFO
sharewifi=/opt/sharewifi
NAME=sharewifi
DESC=sharewifi

# Include nginx defaults if available
if [ ! -f $sharewifi ]; then
    echo "Can't find the file $sharewifi"
    exit 1
fi

case "$1" in
start)
    echo -n "Starting $DESC: "
    sh $sharewifi start eth0 wlan0
    echo "$NAME."
    ;;

stop)
    echo -n "Stopping $DESC: "
    sh $sharewifi stop eth0 wlan0
    echo "$NAME."
    ;;

restart)
    echo -n "Restarting $DESC: "
    sh $sharewifi stop eth0 wlan0
    sleep 1
    sh $sharewifi start eth0 wlan0
    echo "$NAME."
    ;;

*)
    echo "Usage: $NAME {start|stop|restart}" >&2
    exit 1
    ;;
esac

exit 0
### end the file /etc/init.d/sharewifi #########################################

3)执行以下命令,即可设置开机启动:

sudo update-rc.d /etc/init.d/sharewifi defaults

经过昨天的实践,终于搞定Ubuntu共享WiFi功能,而且不是Ad-hoc模式。从此“二奶”可以作为无线中继使用(这里指的是在Ubuntu系统下)。参考教程:
Ubuntu共享WiFi(AP)给Android/更新方法二 http://weibin.me/538

首先很重要的是,要确定无线网卡驱动是否支持master mode。如果不支持,就别想了。然后就可以按照教程安装并设置hostapd和dnsmasq。根据教程,写了个脚本,方便启动或关闭该功能。第一次写比较长的Shell脚本,所以该脚本还是不太完善,但基本可用。要注意,/etc/dnsmasq.conf还是要手动修改。脚本如下:

#!/bin/sh
# begin file: sharewifi

# Setup wireless AP, share the Internet from interface0 to interface1
# USAGE: sharewifi [ start | stop ] interface0 interface1
# EXAMPLE: sharewifi start wlan1 wlan0

help( )
{
cat << HELP
Setup wireless AP, share the Internet from interface0 to interface1
USAGE: sharewifi [ help | start | stop ] interface0 interface1
EXAMPLE: sharewifi start wlan1 wlan0
HELP
exit 0
}

start( )
{
echo Starting share wifi ......
echo Share Internet $port_in to $port_out

# Configure iptable rules
iptables -F
iptables -t nat -A POSTROUTING -s 192.168.7.0/24 -o $port_in -j MASQUERADE
iptables -A FORWARD -s 192.168.7.0/24 -o $port_in -j ACCEPT
iptables -A FORWARD -d 192.168.7.0/24 -m conntrack --ctstate ESTABLISHED,RELATED -i $port_in -j ACCEPT

# Log the message of route
#iptables -A INPUT -m conntrack --ctstate NEW -p tcp --dport 80 -j LOG --log-prefix "NEW_HTTP_CONN: "

# Save iptable rules
sh -c "iptables-save > /etc/iptables.rules"

# Configure hostapd
hostapd_conf=/etc/hostapd/hostapd.conf
[ -f $hostapd_conf ] && rm $hostapd_conf
echo >> $hostapd_conf interface=$port_out
echo >> $hostapd_conf driver=nl80211
echo >> $hostapd_conf ssid=AO522-Tether
echo >> $hostapd_conf channel=1
echo >> $hostapd_conf hw_mode=g
echo >> $hostapd_conf auth_algs=1
echo >> $hostapd_conf wpa=3
echo >> $hostapd_conf wpa_passphrase=1234567890
echo >> $hostapd_conf wpa_key_mgmt=WPA-PSK
echo >> $hostapd_conf wpa_pairwise=TKIP CCMP
echo >> $hostapd_conf rsn_pairwise=CCMP
chmod 755 $hostapd_conf

# Configure /etc/dnsmasq.conf
#interface=wlan0
#bind-interfaces #这个是只监听wlan0,没有之会检测所有卡
#except-interface=lo
#dhcp-range=10.1.1.10,10.1.1.110,6h #设置dhcp地址范

killall named
killall hostapd
ifconfig $port_out 192.168.7.1
hostapd -B $hostapd_conf
/etc/init.d/dnsmasq restart

echo Sucess share wifi

exit 0
}

stop( )
{
echo Stopping share wifi ......
echo Stop share Internet $port_in to $port_out

# Configure iptable rules
iptables -F

# Log the message of route
#iptables -A INPUT -m conntrack --ctstate NEW -p tcp --dport 80 -j LOG --log-prefix "NEW_HTTP_CONN: "

# Save iptable rules
sh -c "iptables-save > /etc/iptables.rules"

# Configure hostapd
hostapd_conf=/etc/hostapd/hostapd.conf
[ -f $hostapd_conf ] && rm $hostapd_conf

# Configure /etc/dnsmasq.conf

killall named
killall hostapd
ifconfig $port_out down
ifconfig $port_out del 192.168.7.1
ifconfig $port_out up

echo Sucess stop share wifi

exit 0
}
#port_in is the network interface which connected to Internet, and default wlan1.
port_in=wlan1

#port_out is the network interface which will be setup AP, and default wlan0.
port_out=wlan0

if [ -n "$2" ]; then
port_in=$2

if [ -n "$3" ]; then
port_out=$3
fi
fi

case "$1" in
"help" )
help ;;
"start" )
start ;;
"stop" )
stop ;;
*)
help ;;
esac

# end file: sharewifi

PS. “二奶”升级到Lubuntu 12.04 LTS,感觉更好用了~

呆在家里,没有宽带,想要上网,只能依靠高价龟速的移动电话GPRS/Edge。此非长久之计,于是想办法连个宽带。

方案1,直接去中国电信申请个宽带。如果后面的方案能解决问题,则不采用此方案。优点:宽带独享,设置简单;缺点:所需资金较多。

方案2,无线网卡增强。买个接收能力更强的无线网卡,或者在Mercury MW54U上加装信号增益天线。优点:便宜、灵活,无线网卡可用作无线AP;缺点:不适合多台电脑、手机上网。

方案3,无线路由。利用无线路由的无线中继功能,增强无线WiFi信号,方便多台无线设备接入。优点:价格适中,方便接入;缺点:无线路由功能简单,功能强大的价格高。

第一次的尝试,利用KOHJINSHA SA1F00小本本作为路由,摆放在无线信号最强的地方。接上MW54U无线网卡,连接WiFi。其以太网卡连接台式机,使得台式机能够接入Internet。台式机可以利用远程桌面,远程控制小本本。操作起来很方便,只是小本本与台式机在不同房间,连接两台机器的网线也不短。此方案还不够好。

改进方案是买个信号更强的无线网卡,直接用台式机接收无线信号。多番比较后选定Netcore NW338,采用 Realtek RTL8188SU一体化芯片,附带5DBI全向增益天线,网上评价不错。但是问题来了。首先Aircrack-ng的芯片支持列表里没有RTL8188SU,其次Ubuntu 10.10需要自行安装驱动,最后台式机所在房间接收的信号太弱,连不上。即使采用USB延长线,也只能延伸到窗口,接收不到我想要的信号源。

进一步方案,系统升级到Ubuntu 11.04,购买5米长的SMA馈线(增益天线延长线),把增益天线延长到室外并绕到拐角处。终于可以实现只用台式机连到想要的信号源,还找到一个没加密的。但是,由于增益天线移置到室外,又要考虑布线、雨天和雷电的问题。

目前还是采用SA1F00小本本作为路由的解决方案。反正那小本本用来做下载机,顺便做路由吧,总比那些带下载功能的路由便宜。

最后总结如下:

1)无线网卡,用馈线延长增益天线,比用USB延长线效果好。因为同样的长度,USB延长线的信号衰减比馈线厉害得多。比如5米长的USB延长线就需要再接个电源,而馈线不需要。

2)选购SMA延长线,也有型号的区别。一般选用单屏蔽50-3的SMA馈线即可。

参考:

馈线的对比:
http://www.anywlan.com/bbs/viewthread.php?tid=29888
http://www.wlanbbs.com/viewthread.php?tid=2888

认识馈线和接头:
http://linglingisreal.blog.163.com/blog/static/42972866201061573818479/