首页
归档
分类
标签
更多
留言板
说说
关于
Search
1
饥荒联机版控制台代码大全
1,028 阅读
2
编译安装带 Brotli 压缩的 Nginx
932 阅读
3
Obsidian多端快速同步插件
901 阅读
4
树莓派+EC20模块实现连接蜂窝网和短信收发
890 阅读
5
EC20通过gammu接收短信再转发优化
866 阅读
软件
CSS
Python
MySql
Java
typecho自定义
Vue
学习笔记
Linux
Shell脚本
Nginx
树莓派
邮件
拍照
热点
ec20
云盘
系统烧录
好玩
饥荒
硬件
工具
笔记
随心记
登录
Search
标签搜索
树莓派
Linux
Java
CSS
饥荒
小妙招
个人热点
nextcloud
云盘
DHT11
学习笔记
树莓派拍照
Nginx
MySql
ESP
娱乐
ec20模块
文件共享
git
图床
Mango
累计撰写
51
篇文章
累计收到
7
条评论
首页
栏目
软件
CSS
Python
MySql
Java
typecho自定义
Vue
学习笔记
Linux
Shell脚本
Nginx
树莓派
邮件
拍照
热点
ec20
云盘
系统烧录
好玩
饥荒
硬件
工具
笔记
随心记
页面
归档
分类
标签
留言板
说说
关于
搜索到
14
篇与
的结果
2022-03-18
DHT11温湿度模块部分代码实例
产品概述DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度 复合传感器。应用专用的数字模块采集技术和温湿度传感技术,可以将获取到的环境温湿度信号通过单总线传输;信号中携带有校验码,一定程度上保证了数据的准确性。性能指标参数最小最大温度范围-20℃60℃湿度范围5%RH95%RH电压3.3V5.5V电流0.06mA1.0mA参数精确度温度±2℃湿度±5%RH引脚说明:VDD 供电3.3~5.5V DCDATA 串行数据,单总线NC 空脚GND 接地,电源负极工作原理数据时序图起始信号:微处理器把数据总线(SDA)拉低一段时间至少 18ms(最大不得超过 30ms),在拉高20us-40us,通知传感器准备数据。响应信号:传感器把数据总线(SDA)拉低 83µs,再拉高 87µs 以响应主机的起始信号。数据格式:收到主机起始信号后,传感器一次性从数据总线(SDA)串出 40 位数据,高位先出当检测到这一位数据的高电平后,我们要看这段高电平究竟会持续多长时间,0信号的高电平持续26-28us,1信号则持续70us。所以在上一步检测到高电平之后我们不妨等一等,等个30us看看高电平是不是还是存在,若还是高电平,那这一位信号就是1信号,若已经变低了,就是0信号,将这个1或0赋值给一个变量。温度:温度高位为温度整数部分数据,温度低位为温度小数部分数据,且温度低位 Bit8 为 1 则表示负温度,否则 为正温度湿度:湿度高位为湿度整数部分数据,湿度低位为湿度小数部分数校验位:校验位=湿度高位+湿度低位+温度高位+温度低位以上内容来自奥松电子DHT11官方文档,详细内容请查看文档代码实例树莓派Python3代码实例#!/usr/bin/python3 coding=utf-8 import RPi.GPIO as GPIO import time data = 18 # DHT11的data引脚连接到的树莓派的GPIO引脚,使用BCM编号 tmp=[] # 用来存放读取到的数据 a,b=0,0 def delayMicrosecond(t): # 微秒级延时函数 start,end=0,0 # 声明变量 start=time.time() # 记录开始时间 t=(t-3)/1000000 # 将输入t的单位转换为秒,-3是时间补偿 while end-start<t: # 循环至时间差值大于或等于设定值时 end=time.time() # 记录结束时间 def DHT11(): GPIO.setmode(GPIO.BCM) # 设置为BCM编号模式 GPIO.setwarnings(False) del tmp[0:] # 删除列表 time.sleep(1) # 延时1秒 GPIO.setup(data, GPIO.OUT) # 设置GPIO口为输出模式 #GPIO.output(data,GPIO.HIGH) # 设置GPIO输出高电平 #delayMicrosecond(10*1000) # 延时10毫秒 GPIO.output(data,GPIO.LOW) # 设置GPIO输出低电平 delayMicrosecond(25*1000) # 延时25毫秒 GPIO.output(data,GPIO.HIGH) # 设置GPIO输出高电平 GPIO.setup(data, GPIO.IN) # 设置GPIO口为输入模式 a=time.time() # 记录循环开始时间 while GPIO.input(data): # 一直循环至输入为低电平 b=time.time() # 记录结束时间 if (b-a)>0.1: # 判断循环时间是否超过0.1秒,避免程序进入死循环卡死 break # 跳出循环 a=time.time() while GPIO.input(data)==0: # 一直循环至输入为高电平 b=time.time() if (b-a)>0.1: break a=time.time() while GPIO.input(data): # 一直循环至输入为低电平 b=time.time() if (b-a)>=0.1: break for i in range(40): # 循环40次,接收温湿度数据 a=time.time() while GPIO.input(data)==0: #一直循环至输入为高电平 b=time.time() if (b-a)>0.1: break delayMicrosecond(28) # 延时28微秒 if GPIO.input(data): # 超过28微秒后判断是否还处于高电平 tmp.append(1) # 记录接收到的bit为1 a=time.time() while GPIO.input(data): # 一直循环至输入为低电平 b=time.time() if (b-a)>0.1: break else: tmp.append(0) # 记录接收到的bit为0 humidity_bit=tmp[0:8] # 分隔列表,第0到7位是湿度整数数据 humidity_point_bit=tmp[8:16]# 湿度小数 temperature_bit=tmp[16:24] # 温度整数 temperature_point_bit=tmp[24:32] # 温度小数 check_bit=tmp[32:40] # 校验数据 humidity_int=0 humidity_point=0 temperature_int=0 temperature_point=0 check=0 for i in range(8): # 二进制转换为十进制 humidity_int+=humidity_bit[i]*2**(7-i) humidity_point+=humidity_point_bit[i]*2**(7-i) temperature_int+=temperature_bit[i]*2**(7-i) temperature_point+=temperature_point_bit[i]*2**(7-i) check+=check_bit[i]*2**(7-i) humidity=humidity_int+humidity_point/10 temperature=temperature_int+temperature_point/10 check_tmp=humidity_int+humidity_point+temperature_int+temperature_point if check==check_tmp and temperature!=0 and temperature!=0: # 判断数据是否正常 print("Temperature is ", temperature,"℃\nHumidity is ",humidity,"%")# 打印温湿度数据 else: print("error") while True: DHT11() GPIO.cleanup() time.sleep(5)树莓派C语言代码实例// //mydht11.c //gcc dht11.c -o dht11 -lwiringPi //代码非原创,已经找不到原作者了,感谢大佬 // #include <wiringPi.h> #include <stdio.h> #include <stdlib.h> typedef unsigned char uint8; typedef unsigned int uint16; typedef unsigned long uint32; #define HIGH_TIME 32 int pinNumber = 1; //use gpio1 to read data uint32 databuf; uint8 readSensorData(void) { uint8 crc; uint8 i; pinMode(pinNumber,OUTPUT); // set mode to output digitalWrite(pinNumber, 1); // output a low level delayMicroseconds(4); digitalWrite(pinNumber, 0); // output a high level delay(25); digitalWrite(pinNumber, 1); // output a low level delayMicroseconds(60); pinMode(pinNumber, INPUT); // set mode to input pullUpDnControl(pinNumber,PUD_UP); if(digitalRead(pinNumber)==0) //SENSOR ANS { while(!digitalRead(pinNumber)); //wait to high delayMicroseconds(80); for(i=0;i<32;i++) { while(digitalRead(pinNumber)); //data clock start while(!digitalRead(pinNumber)); //data start delayMicroseconds(HIGH_TIME); databuf*=2; if(digitalRead(pinNumber)==1) //1 { databuf++; } } for(i=0;i<8;i++) { while(digitalRead(pinNumber)); //data clock start while(!digitalRead(pinNumber)); //data start delayMicroseconds(HIGH_TIME); crc*=2; if(digitalRead(pinNumber)==1) //1 { crc++; } } return 1; } else { return 0; } } int main (void) { if (-1 == wiringPiSetup()) { //printf("Setup wiringPi failed!"); return 1; } pinMode(pinNumber, OUTPUT); // set mode to output digitalWrite(pinNumber, 1); // output a high level //while(1) //{ pinMode(pinNumber,OUTPUT); // set mode to output digitalWrite(pinNumber, 1); // output a high level //delay(3000); if(readSensorData()) { printf("OK!\n"); printf("RH:%d.%d\n",(databuf>>24)&0xff,(databuf>>16)&0xff); printf("TMP:%d.%d\n",(databuf>>8)&0xff,databuf&0xff); databuf=0; } else { printf("Error!\n"); databuf=0; } //} return 0; }ESP32C语言代码实例(ESP-IDF官方编译烧写工具)#include <stdio.h> #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "driver/gpio.h" #include "sdkconfig.h" #define DHT11_PIN (15) //可通过宏定义,修改引脚 #define DHT11_CLR gpio_set_level(DHT11_PIN, 0) //设为低电平 #define DHT11_SET gpio_set_level(DHT11_PIN, 1) //设为高电平 #define DHT11_IN gpio_set_direction(DHT11_PIN, GPIO_MODE_INPUT) //设为输入模式 #define DHT11_OUT gpio_set_direction(DHT11_PIN, GPIO_MODE_OUTPUT) //设为输出模式 uint8_t DHT11Data[4] = {0}; uint8_t Temp, Humi; // us延时函数,误差不能太大 void DelayUs(uint32_t nCount) { ets_delay_us(nCount); } //DHT11初始化 void DHT11_Start(void) { /*************************** * * 主机发送给DHT11复位信号 * * 首先主机拉低总线至少 18ms,然后再拉高总线,延时 20~40us,取中间值 30us,此时复位信号发送完毕。 * * **********************************/ DHT11_OUT; //设置端口方向 DHT11_CLR; //拉低端口 DelayUs(19 * 1000); // vTaskDelay(19 * portTICK_RATE_MS); //持续最低18ms; DHT11_SET; //主机拉高端口 DelayUs(30); //总线由上拉电阻拉高,主机延时30uS; /******************************** * DHT11发送响应信号 * * DHT11 检测到复位信号后,触发一次采样, * 并拉低总线 80us 表示响应信号,告诉主机数据已经准备好了; * 然后 DHT11 拉高总线 80us, * 之后开始传输数据。如果检测到响应信号为高电平, * 则 DHT11 初始化失败, * 请检查线路是否连接正常。 * *******************************/ DHT11_IN; //设置端口方向 while (!gpio_get_level(DHT11_PIN)) ; // DHT11等待80us低电平响应信号结束 while (gpio_get_level(DHT11_PIN)) ; // DHT11 将总线拉高80us } uint8_t DHT11_ReadValue(void) { uint8_t i, sbuf = 0; for (i = 8; i > 0; i--) { sbuf <<= 1; while (!gpio_get_level(DHT11_PIN)) ; DelayUs(40); // 延时 30us 后检测数据线是否还是高电平 if (gpio_get_level(DHT11_PIN)) { sbuf |= 1; } else { sbuf |= 0; } while (gpio_get_level(DHT11_PIN)) ; } return sbuf; } uint8_t DHT11_ReadTemHum(uint8_t *buf) { uint8_t check; buf[0] = DHT11_ReadValue(); buf[1] = DHT11_ReadValue(); buf[2] = DHT11_ReadValue(); buf[3] = DHT11_ReadValue(); check = DHT11_ReadValue(); if (check == buf[0] + buf[1] + buf[2] + buf[3]) return 1; else return 0; } void app_main(void) { // printf("ESP32 DHT11 TEST:%s,%s!\r\n", __DATE__, __TIME__); gpio_pad_select_gpio(DHT11_PIN); while (1) { DHT11_Start(); if (DHT11_ReadTemHum(DHT11Data)) { Temp = DHT11Data[2]; Humi = DHT11Data[0]; printf("ESP32 DHT11 TEST:%s,%s!\r\n", __DATE__, __TIME__); printf("Temp=%d.%d, Humi=%d.%d\r\n", Temp,DHT11Data[3],Humi,DHT11Data[1]); } else { printf("DHT11 Error!\r\n"); } vTaskDelay(5000 / portTICK_PERIOD_MS); } }附录:树莓派GPIO
2022年03月18日
516 阅读
0 评论
0 点赞
2022-02-19
搭建私人云盘
准备硬件:树莓派4B机械硬盘软件:NginxPHPMySqlnextcloud选用树莓派是由于手头上刚好有一块树莓派,为了不让他吃灰;实际上可以选择旧电脑,或者云服务器。软件安装安装nginx$sudo apt install nginx -y安装完成后在浏览器中输入树莓派的IP地址,可以看到如下界面安装PHP7.4目前最新的PHP版本好像是7.4版本,也可以选择其他版本,将php7.4后面的7.4改成对应的版本哈就可以安装其他版本的PHPsudo apt install php7.4 php7.4-fpm php7.4-cli php7.4-curl php7.4-gd php7.4-cgi php7.4-xml php7.4-dom php7.4-zip php7.4-intl php7.4-mbstring php7.4-mysql -y安装并配置MySql$sudo apt install mariadb-server $sudo mysql_secure_installation此时系统会询问你:Enter current password for root (enter for none): ,按回车(enter)键,因为第一次登陆是没有密码的。然后会询问你: Set root password? —— 按 y ,进行root帐号的密码设置此时,会提示 New password ,在此输入你的MySQL密码,请牢记这个密码,输入完成按回车,会提示re-enter new password此时再重复输入密码,回车即可。然后,询问你 Remove anonymous users ,按 y 。然后,询问你 Disallow root login remotely ,按 y 。然后,询问你 Remove test database and access to it ,按 y 。然后,询问你 Reload privilege tables now ,按 y 。最后,您将看到消息 All done! 和 Thanks for using MariaDB! 。表示已经设置完成了。sudo mysql -u root -p #输入密码后: # 创建数据库 CREATE DATABASE IF NOT EXISTS nextcloud DEFAULT CHARACTER SET UTF8 COLLATE utf8_general_ci; # 创建用户 GRANT ALL PRIVILEGES ON nextcloud.* to '用户名'@'127.0.0.1' identified by '密码'; # 刷新数据库 FLUSH PRIVILEGES; 配置软件配置Nginx$sudo vim /etc/nginx/sites-available/defaultnginx默认的网站代理地址是在var/www/html下,可以保留使用原来的,也可以修改到自己新建的地址下。如果选择新建不要忘记去确保指定的路径下的文件夹要存在。像我的就要在/var下新建owncloud文件夹。sudo mkdir /var/owncloud location / { index index.html index.htm index.php default.html default.htm default.php; if (-f $request_filename/index.html){ rewrite (.*) $1/index.html break; } if (-f $request_filename/index.php){ rewrite (.*) $1/index.php; } if (!-f $request_filename){ rewrite (.*) /index.php; } }去掉location ~ \ .php上的注释给根目录权限# 给权限 sudo chmod -R 755 /var/owncloud sudo chown -R www-data:www-data /var/owncloud #重启nginx sudo systemctl restart nginx在刚刚网站指定的目录下新建PHP测试文件$sudo vim /var/owncloud/index.php #输入以下代码 <?php phpinfo(); ?>重新启动Nginx:$sudo systemctl restart nginx可能报错:“Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.”多检查修改过的地方,是否有单词错误,或者是否有分号,括号是否对应...Nginx代理php成功后,在浏览器输入树莓派IP地址后能看到如下界面说明配置成功。安装nextCloud进入刚刚配置的代理目录:cd /var/nextcloud将刚刚的测试文件删除: sudo rm *下载nextcloud)sudo wget https://download.nextcloud.com/server/releases/nextcloud-23.0.2.tar.bz2这是目前最新版本,请自己到官网查看版本# 解压缩: sudo tar -jxvf nextcloud-23.0.2.tar.bz2 nextcloud # 复制出来 sudo cp -rf nextcloud/* /var/owncloud再访问IP地址就可以看到NextCloud的运行界面了
2022年02月19日
269 阅读
0 评论
0 点赞
2022-02-09
树莓派开启个人热点
更新软件$sudo apt update $sudo apt upgrade安装并配置hostapd服务安装hostapd$sudo apt install hostapd $sudo systemctl stop hostapd配置hostapd编辑/etc/hostapd/hostapd.conf文件,如果不存在这个文件可以直接新建一个。$sudo vim /etc/hostapd/hostapd.confinterface=wlan0 #bridge=br0 #无线驱动n180211 driver=nl80211 logger_syslog=-1 logger_syslog_level=2 logger_stdout=-1 logger_stdout_level=2 ##### IEEE 802.11 related configuration ####################################### #热点名字,可根据需要自行更改 ssid=AP-Pi4 utf8_ssid=1 # ISO/IEC 3166-1 标准的国家代码,用于设置监管域。根据需要设置,按照哪个国家来操作设备。 # 这可以限制可用的频道和发射功率。 #country_code=CN # 是否启用 IEEE 802.11d,0 禁用(默认),1 启用。 # 需要正确设置 country_code 才能使 IEEE 802.11d 正常工作。 #ieee80211d=1 # 是否启用 IEEE 802.11h,0 禁用(默认),1 启用。 # 这将启用雷达探测和 DFS 支持,如果可用话。 #ieee80211h=1 # 添加 Power Constraint element 到 Beacon 和 Probe Response frames 中去。 #local_pwr_constraint=5 # 该选项仅在 ieee80211h=1 选项并且已经配置 local_pwr_constraint 选项时可用。 #spectrum_mgmt_required=1 # 设置无线模式需要硬件支持 #a = IEEE 802.11a, #b = IEEE 802.11b, g #= IEEE 802.11g, #ad = IEEE 802.11ad (60 GHz) # hw_mode=a 或 hw_mode=g 选项也与 IEEE 802.11n 一起使用来设置波段。 # 当使用 ACS 时(看下文 channel parameter ),可以使用特殊的选项值 hw_mode=any ,说明可以使用任何可用的波段,该值当前仅在驱动使用了 offloaded ACS 的情况下有效。 # 默认: hw_mode=b hw_mode=g # 注意有些设备不使用这个选项,而是需要在 iwconfig 中另外配置。 # 如果编译的时候启用了 CONFIG_ACS 选项。通过设置 channel=acs_survey 或 channel=0,这样 hostapd 可以在运行时基于 ACS survey 算法自动选择合适的信道。 # 有些设备仅支持最大为11频道,有些支持最大为13频道,可以通过iw list 查看。 # 另外启用 ht_capab 将影响可用的频道数 channel=6 # ACS tuning - 信道自动选择 # 参考:http://wireless.kernel.org/en/users/Documentation/acs # 信道自动选择,有助于选择更好的信道,但是会增加启动时间,一般不需要修改。 # 可以通过设置下面选项自定义 ACS survey 算法。 # 默认:acs_num_scans=5 acs_chan_bias=1:0.8 6:0.8 11:0.8 #acs_num_scans=40 #acs_chan_bias=1:0.8 6:0.8 11:0.8 # 默认允许所有信道 #chanlist=100 104 108 112 116 #chanlist=1 6 11-13 # beacon 间隔 (默认: 100; 范围 15到65535) #beacon_int=100 #dtim_period=1 # 默认且最大值为2007个列表 #max_num_sta=255 #rts_threshold=2347 #fragm_threshold=2346 #supported_rates=10 20 55 110 60 90 120 180 240 360 480 540 #basic_rates=10 20 #basic_rates=10 20 55 110 #basic_rates=60 120 240 # 用命令:iw list 查看无线网卡是否有“short preamble supported”。 # 0 禁用,1 启用,无线网卡支持的话可以启用以改善网络性能。 #preamble=1 # 无线MAC地址过滤 # 此选项要求 driver=hostap 或 driver=nl80211 # 0 = 接受所有连接,仅拒绝 deny 列表中的连接 # 1 = 拒绝所有连接,仅接受 accept 列表中的连接 # 2 = 使用外部 RADIUS 服务器 (还是会优先查找 accept/deny 列表) # 简单一点的话,可以将两个列表设置为同一个文件,仅由 macaddr_acl 来控制允许或拒绝 macaddr_acl=0 accept_mac_file=/etc/hostapd/hostapd.accept deny_mac_file=/etc/hostapd/hostapd.deny # 身份验证算法,1 开放系统认证,2 共享密钥认证(需要 WEP),3 两者 auth_algs=3 # 是否广播,0 广播SSID,1 不广播SSID(发送空SSID,即长度为0的SSID), # 2 忽略广播 SSID 的探测请求,跟1类似,但是兼容某些不支持空SSID的设备 #ignore_broadcast_ssid=0 #vendor_elements=dd0411223301 # 启用WMM wmm_enabled=1 # # WMM-PS Unscheduled Automatic Power Save Delivery [U-APSD] # Enable this flag if U-APSD supported outside hostapd (eg., Firmware/driver) #uapsd_advertisement_enabled=1 # # Low priority / AC_BK = background #wmm_ac_bk_cwmin=4 #wmm_ac_bk_cwmax=10 #wmm_ac_bk_aifs=7 #wmm_ac_bk_txop_limit=0 #wmm_ac_bk_acm=0 # Note: for IEEE 802.11b mode: cWmin=5 cWmax=10 # # Normal priority / AC_BE = best effort #wmm_ac_be_aifs=3 #wmm_ac_be_cwmin=4 #wmm_ac_be_cwmax=10 #wmm_ac_be_txop_limit=0 #wmm_ac_be_acm=0 # Note: for IEEE 802.11b mode: cWmin=5 cWmax=7 # # High priority / AC_VI = video #wmm_ac_vi_aifs=2 #wmm_ac_vi_cwmin=3 #wmm_ac_vi_cwmax=4 #wmm_ac_vi_txop_limit=94 #wmm_ac_vi_acm=0 # Note: for IEEE 802.11b mode: cWmin=4 cWmax=5 txop_limit=188 # # Highest priority / AC_VO = voice #wmm_ac_vo_aifs=2 #wmm_ac_vo_cwmin=2 #wmm_ac_vo_cwmax=3 #wmm_ac_vo_txop_limit=47 #wmm_ac_vo_acm=0 # Note: for IEEE 802.11b mode: cWmin=3 cWmax=4 burst=102 # 检测客户端不活动超时,是否在线间隔时间,默认每5分钟检测客户端是否在线 # 站点不活动限制,默认5分钟 #ap_max_inactivity=300 # 默认禁用,设置为1,说明只要客户在5分钟内没有活动就断线,即使客户端仍然在AP信号的范围内, #如果客户端过多可以启用来提高带机量。 #skip_inactivity_poll=0 # 对于过度的传输失败或其他连接丢失的情况下,断开连接,这并不适合所有设备 #disassoc_low_ack=1 # 最大允许侦听间隔,默认65535,即不限制 (how many Beacon periods STAs are allowed to remain asleep) #max_listen_interval=100 # WDS(4-address frame)模式,仅在 driver=nl80211 的情况下支持 #wds_sta=1 # 仅在设置了bridge= 时有效,默认情况下,例如当设置了bridge=br0,那么wds_bridge=br0。 # 当然也可以手动指定为wds_bridge=XXXXX。 #wds_bridge=wds-br0 # Start the AP with beaconing disabled by default.没明白是什么意思。 #start_disabled=0 # AP隔离,1启用,0禁用。默认不隔离。 #ap_isolate=1 #bss_load_update_period=50 # 用于测试的 #bss_load_test=12:80:20000 ##### IEEE 802.11n related configuration ###################################### # 启用80211n,你也将需要启用WMM来使用全部HT功能。 ieee80211n=1 # [HT40-]或[HT40+]没有设置的话将只工作在20MHz, # [HT40-]对应可使用的频道为5-13 # [HT40+]对应可使用的频道为1-7(欧洲标准为1-9) # 当多径效应不是很严重时,用户可以将该间隔配置为[SHORT-GI-20][SHORT-GI-40] # 个人理解,如果不上天馈系统的话可以启用[SHORT-GI-20][SHORT-GI-40],前提是硬件支持。 #ht_capab=[LDPC][HT40-][HT40+][SHORT-GI-20][SHORT-GI-40][SMPS-DYNAMIC][GF][TX-STBC][RX-STBC123][DELAYED-BA][MAX-AMSDU-7935][DSSS_CCK-40][40-INTOLERANT][LSIG-TXOP-PROT] # intel Wireless-N 105 (rev c4) 网卡支持的选项 ht_capab=[HT40-][SHORT-GI-20][SHORT-GI-40][DSSS_CCK-40][40-INTOLERANT][GF] # Atheros AR9271 网卡支持的选项 #ht_capab=[HT40-][SHORT-GI-20][SHORT-GI-40][DSSS_CCK-40][40-INTOLERANT][RX-STBC1] #ht_capab=[HT40-][SHORT-GI-20][SHORT-GI-40][DSSS_CCK-40] #ht_capab=[HT40-][SHORT-GI-20][SHORT-GI-40] #ht_capab=[HT40+][DSSS_CCK-40][40-INTOLERANT] # 强制要求客户端使用HT PHY,不使用就拒绝。 #require_ht=0 # 间隔时间(秒) #obss_interval=5 ##### WPA/IEEE 802.11i configuration ########################################## # 1 wpa,2 wpa2, 3 两者。 新的设备可以设置为2,仅使用wpa2版本。 wpa=2 # 指定密码,ASCII码或密码字符。 #wpa_psk=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef #密码设置 wpa_passphrase=12345678 # 使用密码文件,可以跟客户端MAC地址绑定设置不同的密码,比较实用。 wpa_psk_file=/etc/hostapd/hostapd.wpa_psk # 是否使用验证服务器,0 禁用(默认),1 可用,2 强制使用(其他方式将拒绝) #wpa_psk_radius=0 # 设置密钥管理算法WPA-PSK WPA-EAP或两者 wpa_key_mgmt=WPA-PSK # 设置加密算法,CCMP就是AES,不推荐使用TKIP,除非设备不支持。 wpa_pairwise=CCMP # 默认情况下rsn_pairwise自动设置为wpa_pairwise的值,当然也可以手动指定。 #rsn_pairwise=CCMP #wpa_group_rekey=600 #wpa_strict_rekey=1 #wpa_gmk_rekey=86400 #wpa_ptk_rekey=600 # 预认证 #rsn_preauth=1 #rsn_preauth_interfaces=wlp2s0 br0 enp3s0 #peerkey=1 # 80211w支持,0 禁用(默认),1 可选,2 强制使用(其他方式将拒绝) 有些网卡不支持 #ieee80211w=1 # AES-128-CMAC(默认) BIP-GMAC-128 BIP-GMAC-256 BIP-CMAC-256 四种 # 一般通用设备都支持AES-128-CMAC,其他的不一定 #group_mgmt_cipher=AES-128-CMAC #assoc_sa_query_max_timeout=1000 #assoc_sa_query_retry_timeout=201 #disable_pmksa_caching=0 #okc=1 #sae_anti_clogging_threshold=5 #sae_groups=19 20 21 25 26 ##### IEEE 802.11r configuration ############################################## # Wi-Fi无线漫游标准 #mobility_domain=a1b2 #r0_key_lifetime=10000 #r1_key_holder=000102030405 #reassociation_deadline=1000 #pmk_r1_push=1 ##### Neighbor table ########################################################## #ap_table_max_size=255 #ap_table_expiration_time=3600 ##### IEEE 802.11v-2011 ####################################################### # Wi-Fi节能版 #time_advertisement=2 #time_zone=CST8 # 下面三项有些网卡不支持 #wnm_sleep_mode=1 #bss_transition=1 #proxy_arp=1为了便于使用,将注释去除 (所用协议较老,请参照最新版)interface=wlan0 driver=nl80211 #修改名字 ssid=AP-Pi4 utf8_ssid=1 hw_mode=g channel=7 ieee80211n=1 macaddr_acl=0 auth_algs=1 wmm_enabled=0 wpa=2 #密码设置 wpa_passphrase=12345678 wpa_key_mgmt=WPA-PSK wpa_pairwise=CCMPssid: WiFi 名称,8~64 个字符,最好用英文字母,不要出现特殊字符hw_mode: WiFi 网络模式,一般填 g 即可,设备支持的话可以填 a 启用 5G 频段:a = IEEE 802.11a (5 GHz)b = IEEE 802.11b (2.4 GHz)g = IEEE 802.11g (2.4 GHz)channel: 信道编号。如果上面配置了 hw_mode=g 使用 2.4G 频段,则一般填 7 即可。如果配置了 5G 频段,则信道编号有所不同,具体参考:无线局域网信道列表 - 维基百科,自由的百科全书 (wikipedia.org)wpa_passphrase: WiFi 密码,最好用英文加数字,不要出现特殊字符最新版配置文件interface=wlan0 driver=nl80211 ssid=AP-Pi4 hw_mode=a channel=0 ieee80211n=1 ieee80211ac=1 ieee80211ax=1 ieee80211d=1 ieee80211h=1 country_code=CN auth_algs=1 wpa=2 wpa_passphrase=123456789 wpa_key_mgmt=WPA-PSK WPA-PSK-SHA256 rsn_pairwise=CCMP macaddr_acl=0 wmm_enabled=1 wmm_ac_bk_cwmin=4 wmm_ac_bk_cwmax=10 wmm_ac_bk_aifs=7 wmm_ac_bk_txop_limit=0 wmm_ac_bk_acm=0 wmm_ac_be_aifs=3 wmm_ac_be_cwmin=4 wmm_ac_be_cwmax=10 wmm_ac_be_txop_limit=0 wmm_ac_be_acm=0 wmm_ac_vi_aifs=2 wmm_ac_vi_cwmin=3 wmm_ac_vi_cwmax=4 wmm_ac_vi_txop_limit=94 wmm_ac_vi_acm=0 wmm_ac_vo_aifs=2 wmm_ac_vo_cwmin=2 wmm_ac_vo_cwmax=3 wmm_ac_vo_txop_limit=47 wmm_ac_vo_acm=0 he_su_beamformer=1 he_su_beamformee=1 he_mu_beamformer=1 he_bss_color=5 he_default_pe_duration=0 he_basic_mcs_nss_set=2 he_oper_centr_freq_seg0_idx=0 require_ht=1 he_su_beamformee=1 he_su_beamformer=1 he_bss_color=3 he_twt_required=1 vht_capab=[SHORT-GI-80][RX-STBC1][TX-STBC][SU-BEAMFORMER][SU-BEAMFORMEE]编辑/etc/default/hostapd文件,将DAEMON_CONF前面的注释去掉,并加上/etc/hostapd/hostapd.conf$sudo vim /etc/default/hostapd DAEMON_CONF="/etc/hostapd/hostapd.conf"保存退出后启动hostapd$sudo systemctl unmask hostapd $sudo systemctl enable hostapd $sudo systemctl start hostapd可以看到热点已经开启成功,但是还没有分配IP不能上网。配置wlan0静态IP让wlan0的IP地址设置成静态的,然后在通过DHCP同态的去给连接设备分配IP$sudo apt install dhcpcd $sudo vim /etc/dhcpcd.conf在文件最后添加interface wlan0 static ip_address=192.168.4.1/24 nohook wpa_supplicant保存退出,重启dhcpcd服务:$sudo systemctl restart dhcpcd查看wlan0的IP地址:ifconfig ,可以发现,wlan0的IP已经改变为之前设置的地址安装并配置dnsmasq服务Dnsmasq 提供 DNS 缓存和 DHCP 服务功能。作为域名解析服务器(DNS),dnsmasq可以通过缓存 DNS 请求来提高对访问过的网址的连接速度。作为DHCP 服务器,dnsmasq 可以用于为局域网电脑分配内网ip地址和提供路由。DNS和DHCP两个功能可以同时或分别单独实现。dnsmasq轻量且易配置,适用于个人用户或少于50台主机的网络。此外它还自带了一个 PXE 服务器。安装dnsmasq服务$ sudo apt install dnsmasq $ sudo systemctl stop dnsmasq配置dnsmasq编辑/etc/dnsmasq.conf文件,将里面的内容删除或者注释掉。sudo vim /etc/dnsmasq.conf #添加新内容 interface=wlan0 dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h #dhcp 服务会给客户端分配 192.168.4.2 到 192.168.4.20 的 IP 空间,并设置24 小时租期。 #重启dnsmasq服务 $sudo systemctl restart dnsmasq配置完后连接到热点已经自动分配到了一个IP地址,但是还不能上网配置IP转发编辑 /etc/sysctl.conf 系统配置文件,将 net.ipv4.ip_forward=1 前面的注释去掉。$sudo vim /etc/sysctl.conf #net.ipv4.ip_forward=1 #将前面的 # 号删除修改防火墙规则安装iptablesapt install iptables$sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE $sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT $sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT ##若要通过热点建立NAS开启以下防火墙规则 #sudo iptables -A INPUT -p tcp --dport 139 -j ACCEPT #sudo iptables -A OUTPUT -p tcp --sport 139 -j ACCEPT #sudo iptables -A INPUT -p tcp --dport 445 -j ACCEPT #sudo iptables -A OUTPUT -p tcp --sport 445 -j ACCEPT 为了避免每次重启后都要重新配置,将防火墙规则写入开机启动项将防火墙规则写入文件 $sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"编辑/etc/rc.local,将iptables-restore < /etc/iptables.ipv4.nat加到exit 0前面。$sudo vim /etc/rc.local #加在exit 0前面 iptables-restore < /etc/iptables.ipv4.nat 若执行后出现:sh: 1: iptables-save: not found 要先安装iptables $sudo apt install iptables保存退出后重启树莓派:sudo reboot。网络测试经过一段时间的测试,能够正常访问互联网,网速也还可以,但是在流量较大时会间歇性断开连接,上传速率也有些异常,目前还不清楚是什么原因造成。(已解决)常见问题修复网络慢问题分析及解决办法{% link 树莓派开启个人热点(二)解决网速慢问题,Mstzf,https://blog.teohzy.com/post/startAP2/index.html %}设置hostapd开机自启失败解决办法可能原因:NetworkManager占用wlan0导致启动失败解决办法:禁用 NetworkManager 控制 wlan0创建一个 NetworkManager 的配置文件sudo nano /etc/NetworkManager/conf.d/no-wlan0.conf编辑配置文件[keyfile] unmanaged-devices=interface-name:wlan0重启NetworkManagersudo systemctl restart NetworkManager
2022年02月09日
417 阅读
0 评论
0 点赞
2021-11-30
树莓派开机自动发送邮件
在平时使用树莓派的过程中,大多数人的习惯都是直接使用终端去连接树莓派,很少使用屏幕去直接操作;而在连接终端的时候又必须要知道树莓派的IP地址;这时候如果树莓派能够通过邮件的方式直接将自己的IP地址直接发送给我们,在连接时就会省去很多不必要的麻烦。安装软件安装mutt:$sudo apt-get install mutt安装msmtp:$sudo apt-get install msmtp设置软件设置mutt编辑/etc/Muttrc 系统全局设置编辑~/.muttrc 为某个系统用户设置这里对全局进行设置$sudo vim /etc/Muttrc在文件最后面添加如下代码set sendmail="/usr/bin/msmtp" set use_from=yes set realname="Raspberry" #邮箱发送人昵称 set from=xxxxx@xxx.com #自己的发件箱邮箱地址 set envelope_from=yes set crypt_use_gpgme=no登录邮箱,进入邮箱设置界面,开启邮箱的IMAP/SMTP服务下图为163邮箱设置msmtp创建 ~/.msmtprc 和 ~/.msmtp.log 两个文件分别作为msmtp的配置文件和日志文件编辑.msmtprcvim ~/.msmtprcaccount default host smtp.163.com #自己邮箱的smtp地址,我的是163邮箱,所以是这个 from mstz1130@163.com #自己的邮箱地址 auth plain user mstz1130 #自己的邮箱用户名,就是@前的 password xxxxxxxx #这个并不是邮箱密码,是邮箱授权码 logfile ~/.msmtp.log #日志文件地址由于password是明码,所以我们要修改文件的权限$sudo chmod 600 .msmtprc163邮箱授权码的开启位置,其他邮箱的具体位置请自行查询。测试邮件发送$ echo "正文" | mutt -s ”主题“ xxx@xx.com -q 附件获取IP地址脚本可以在任意可执行位置创建$vim sendip.sh#!/bin/bash # check network availability SITE_TO_CHECK="www.163.com" while true do TIMEOUT=5 RET_CODE=`ping -s 1 -c 1 $SITE_TO_CHECK` if [ "$?" != "0" ] then echo "Network not ready, wait..." sleep 1s else echo "Network OK, will send mail..." break fi done # get the IP address of eth0, e.g. "192.168.x.x" WLAN0_IP_ADDR=`ifconfig wlan0 | sed -n "2,2p" | awk '{print substr($2,1)}'` ETH0_IP_ADDR=`ifconfig eth0 | sed -n "2,2p" | awk '{print substr($2,1)}'` ETH1_IP_ADDR=`ifconfig eth1 | sed -n "2,2p" | awk '{print substr($2,1)}'` ETH2_IP_ADDR=`ifconfig eth2 | sed -n "2,2p" | awk '{print substr($2,1)}'` # send the Email echo "Current time: `date '+%F %T'` WLAN0 IP Address of Raspberry Pi: $WLAN0_IP_ADDR ETH0 IP Address of Raspberry Pi: $ETH0_IP_ADDR IP address loading completed ! ! !" | mutt -s "IP Address of Raspberry Pi" xxx@xxx.com写入开机启动项$sudo vim /etc/rc.local在exit 0之前加入以下命令su pi -c /home/pi/sh/sentIP.sh &具体路径由自己创建的脚本地址位置来决定,&表示并发执行,在脚本运行时不影响其他脚本
2021年11月30日
299 阅读
0 评论
0 点赞
1
2