树莓派超声波测距

树莓派超声波测距

超声波传感器

就是传说中的Ultrasonic传感器,学名:HC-SR04 , 某宝上非常cheap, 自己搜.

测距原理

  • 超声波距离传感器设计为使用超声波来测量源与目标之间的距离。
  • 我们之所以使用超声波,是因为超声波在短距离内相对准确,并且不会引起人耳无法听到的干扰。

特性说明

HC-SR04是用于2cm至400cm距离非接触距离测量的常用模块。
它使用声纳(如蝙蝠和海豚)以高精度和稳定的读数来测量距离。
它由超声波发射器,接收器和控制电路组成。
发射器发射短脉冲,该短脉冲被目标反射并被接收器拾取。
计算超声波信号的发送和接收之间的时间差。
使用声速和“ 速度=距离/时间 ”等式,可以轻松计算源与目标之间的距离。

引脚说明

HC-SR04超声波距离传感器模块具有四个引脚:

  • VCC – 5V,输入电源

  • TRIG –触发输入

  • 回声 –回声输出

  • GND –接地

    实际工作原理

  • 1.向TRIG输入提供触发信号,它需要至少10μS持续时间的高电平信号。

  • 2.这使模块能够发送八个40KHz超声波脉冲串。

  • 3.如果模块前面有障碍物,它将反射那些超声波

  • 4.如果信号返回,则模块的ECHO输出将在发送和接收超声信号所花费的时间内保持为高电平。脉冲宽度的范围为150μS至25mS,具体取决于障碍物与传感器之间的距离,如果没有障碍物,则脉冲宽度约为38ms。

    接线方式

    非常关键的分压步骤

    ECHO输出为5v而Raspberry Pi GPIO的输入引脚的额定电压为3.3V,因此,无法将5V直接提供给不受保护的3.3V输入引脚,除非你想把树莓派干掉...
    因此,我们得使用分压电路,使用适当的电阻将电压降至3.3V。

    以下公式可用于计算电阻值,
    “ Vout = Vin x R2 /(R1 + R2)”
    这里我用的是常用的4.7K和10K电阻做的分压电路,中间抽头给树莓派GPIO引脚,安全可靠。

    连接实物模拟图

    画图软件是frizing, 不要再私信问我了...

    计算方法

  • 距离计算
    脉冲所花费的时间实际上是超声波信号往返的时间,而我们只需要一半的时间。因此,时间被视为时间/ 2。

  • 距离=速度时间/ 2
    而海平面声速= 343 m / s或34300 cm / s
    因此,距离= 17150
    时间(单位厘米)

*校准
为了获得准确的距离读数,可以使用尺子校准输出。在下面的程序中,添加了0.5 cm的校准。
你如果不想校准也可以尝试不加,就是大致有点儿偏移量。

测试代码:

import RPi.GPIO as GPIO                    #Import GPIO library
import time                                #Import time library
GPIO.setmode(GPIO.BCM)                     #Set GPIO pin numbering 

TRIG = 23                                  #Associate pin 23 to TRIG
ECHO = 24                                  #Associate pin 24 to ECHO

print "Distance measurement in progress"

GPIO.setup(TRIG,GPIO.OUT)                  #Set pin as GPIO out
GPIO.setup(ECHO,GPIO.IN)                   #Set pin as GPIO in

while True:

  GPIO.output(TRIG, False)                 #Set TRIG as LOW
  print "Waitng For Sensor To Settle"
  time.sleep(2)                            #Delay of 2 seconds

  GPIO.output(TRIG, True)                  #Set TRIG as HIGH
  time.sleep(0.00001)                      #Delay of 0.00001 seconds
  GPIO.output(TRIG, False)                 #Set TRIG as LOW

  while GPIO.input(ECHO)==0:               #Check whether the ECHO is LOW
    pulse_start = time.time()              #Saves the last known time of LOW pulse

  while GPIO.input(ECHO)==1:               #Check whether the ECHO is HIGH
    pulse_end = time.time()                #Saves the last known time of HIGH pulse 

  pulse_duration = pulse_end - pulse_start #Get pulse duration to a variable

  distance = pulse_duration * 17150        #Multiply pulse duration by 17150 to get distance
  distance = round(distance, 2)            #Round to two decimal points

  if distance > 2 and distance < 400:      #Check whether the distance is within range
    print "Distance:",distance - 0.5,"cm"  #Print distance with 0.5 cm calibration
  else:
    print "Out Of Range"                   #display out of range

测试

python3 ultrasonic_distance_detect.py

效果很明显。

总结

反射角度如果大于15度有可能会出现值不准,如果附近噪声很大也许会有干扰,其他的没啥,很简单的一个模块,可以结合树莓派或者别的设备做一个超声波控制音量的玩意儿,树莓派爬音乐网站,播放音乐,由超声波传感器来进行检测,距离小于多少就降低音量,否则就开大音量, 自己想办法玩儿吧! 转载记得标识出处!
谢谢观看,我是骑驴玩儿漂移,甩你三条街~ 白了个白~

Live555直播

树莓派上用 Live555 直播摄像头数据

最近在群里听到有朋友推荐使用 live555 来在树莓派上进行rtsp 服务器的搭建,非常简单做个记录防忘记.
Live555是一个开源的 C++源码编写的流媒体推流软件合集,功能好多,还咩有玩儿透彻,但是你也看得懂源码的.非常激动人心.

软件包下载

链接: http://www.live555.com/liveMedia/public/

通过命令解压并执行 makefile 的生成.

tar -xf live555-latest.tar.gz
cd live/
./genMakefiles linux

编辑当前目录下面的live/testProgs/testOnDemandRTSPServer.cpp

修改这部分内容:

树莓派上创建一个 fifo 文件,先进先出管道.

mkfifo /tmp/rpicam

然后编译并安装.

make 
sudo make install

进入 testProgs 目录执行二进制文件.

./testOnDemandRTSPServer &

树莓派开启摄像头并执行:

raspivid -rot 180 -o /tmp/rpicam -f -t 0

VLC 测试或者 opencv 测试:

  1. vlc 在打开网络流的URL 里面输入设备流地址: rtsp://192.168.3.20:8554/liv0 就可以观看了.
  2. 使用 opencv 打开,自己创建一个文件:
    如图,截图中缩进层级有点儿变化,主要看后面的代码.
    图为:

    代码走一波

    # get streaming video via opencv
    import cv2
    import numpy as np
    cap = cv2.VideoCapture("rtsp://192.168.3.20:8554/liv0")
    try:
    while True:
        ret, frame = cap.read()
        if ret == True:
            smallFrame = cv2.resize(frame, (480, 240))
    
            key = cv2.waitKey(1)
            if key == 27:
                break
            cv2.imshow("small size Frame", smallFrame)
    except KeyboardInterrupt:
    print("quit")
    cap.release()
    cv2.destroyAllWindows()

    执行查看:

    python3 streaming_get_from_opencv.py

    效果如图:

    好了,还有一个我在蘑菇云参加一个 piday4fun 的活动地址在: https://github.com/piday4fun

    还楞啥,燥起来吧!!!

    转发记得标明出处, 否则小心菊花万人捅~

树莓派配置 vim 支持 python 代码补全

首先在树莓派中安装vim:

sudo apt-get update
sudo apt-get install vim  

克隆rkulla 的pydiction项目到本地:

mkdir -p ~/.vim/bundle
cd ~/.vim/bundle
git clone https://github.com/rkulla/pydiction.git
cp -r ~/.vim/bundle/pydiction/after/ ~/.vim   # 这步非常关键

如果有新的软件包想要支持补全.例如 RPi.GPIO
那么先安装包

sudo apt-get -y install RPi.GPIO

然后进入目录
cd ~/.vim/bundle/pydiction/
python3 pydiction.py RPi.GPIO
就可以生成全新的 complete-dict 了.

配置.vimrc文件:
" 启用文件类型插件

filetype plugin on

" 配置pydiction插件路径

let g:pydiction_location = '~/.vim/bundle/pydiction/complete-dict'

" 设置pydiction补全菜单的高度,默认是8

let g:pydiction_menu_height = 20
set syntax on

wiringPi updated to 2.52 for the Raspberry Pi 4B

前言

不知道你卖树莓派4B了么?不知道你们是否尝试在树莓派4b上用wiringpi的库,反正是官方的不好用。
那么你该怎么办?

场景展示

  • 如果你用sudo apt -y install wiringpi, 然后执行gpio readall的时候,提示你OPPS, the libararies is fucked.
    那么你就赶紧卸载掉吧!

    sudo apt -y purge wiringpi
    hash -r 

    下载软件包并且安装

    cd /tmp
    wget https://project-downloads.drogon.net/wiringpi-latest.deb
    sudo dpkg -i wiringpi-latest.deb

    检查:

    gpio readall 
    gpio -v 

    正常显示

    补充一下,源码下载的官方站点有点儿不稳定,我下载下来放在我博客上了,有需要的直接下载我这里的deb包安装效果一样的。

    wiringpi-latest.deb.tar
    下载后上传树莓派,通过命令

    tar -xf wiringpi-latest.deb_.tar.gz
    dpkg -i wiringpi-latest.deb

用树莓派制作gif动画

1. 安装树莓派摄像头,得是官方的。

2.更新系统安装imagemagick软件包:

sudo apt-get -y install imagemagick

 

然后;

raspistill -w 800 -h 600 -t 10000 -tl 2000 -o image%02d.jpg
convert -delay 10 -loop 0 image*.jpg animateMe.gif

默认情况下,相机拍摄的分辨率为3280×2464像素,分辨率为72 ppi(p ixels p er inch )。这非常大,因此图像处理时间会更长。在Raspistill中,可以通过说明宽度和高度来调整图像的大小。

  • -w -h 用于将图像大小调整为800 x 600像素
  • -t 表示整个过程花费的总时间(以毫秒为单位)
  • -tl  拍照的频率
  • -o 输出文件名
  • image%02d.jpg自动为带有图像的照片命名,并在右侧为生成的计数器添加两个空格例如:

    • image00.jpg
    • image01.jpg
    • image02.jpg

如果您觉得可拍摄超过99张照片,则可以创建3个甚至4个空格,这样您就可以使用图像%03d.jpg图像%04d.jpg保存数千张图像

convert 是来自ImageMagick的命令。此行将所有已保存的jpeg带有图像前缀,并将它们转换为动画GIF,延迟(-delay)为10/100秒。

-loop 0 表示GIF将永远循环。

树莓派结合ADC做个光敏感应的灯

树莓派结合ADC做个光敏感应灯

前言

其实没有什么想法,就是想把ADC用熟练了,这些小案例都是自己杜撰的,实际上没有那么多场景需要用,但是最近真的用在了智能浇花设备上,土壤湿度采样的传感器是模拟的,所以,可以用ADC秀一波操作。

操作步骤

  • 步骤1:从https://www.raspberrypi.org/downloads/下载最新镜像,然后选择Raspbian。
  • 步骤2:烧录镜像然后启动树莓派。 
  • 步骤3:通过在终端中键入以下命令连接到Internet并更新系统:
    sudo apt-get update
    sudo apt-get upgrade
  • 步骤4:将所有东西连接在一起然后打开你的树莓派,不知道为啥网上给树莓派起名字叫覆盆子,太tm难听了。raspberry就改成树莓不行么?

    手绘电路图,看懂了就过,看不懂就自己学习一下再过。

    接驳示意图,ADC的AIN1 通道采样。中间抽头给树莓派,采集信号信息。

    C语言编程

    下面的内容就是开始编程了,如果你喜欢用C,那么就这样,写个源码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <linux/i2c-dev.h>
    #include <sys/ioctl.h>
    #include <fcntl.h>
    #include <wiringPi.h>
    void main()
    {
    wiringPiSetup(); 
    //Physical Pin = 40, name is GPIO.29 and wPi name is 29, BCM 21.
    pinMode(29, OUTPUT);   
    int file; 
    char *bus = "/dev/i2c-1";
    if ((file = open(bus, O_RDWR)) < 0) 
    {
     printf("Failed to open the bus.\n");
     exit(1);
     } 
    // Get I2C device, ADS1115 I2C address is 0x48(72)
    ioctl(file, I2C_SLAVE, 0x48) 
    // Select configuration register(0x01)
    // AINP = AIN0 and AINN = AIN1, +/- 2.048V 
    // Continuous conversion mode, 128 SPS(0x84, 0x83) 
    char config[3] = {0}; 
    config[0] = 0x01; 
    config[1] = 0xD4; 
    config[2] = 0x83; 
    write(file, config, 3); 
    sleep(1); 
    // Read 2 bytes of data from register(0x00) 
    // raw_adc msb, raw_adc lsb 
    char reg[1] = {0x00};
    write(file, reg, 1); 
    char data[2]={0};
    if(read(file, data, 2) != 2) 
    { 
    printf("Error : Input/Output Error\n");
    }
    else
    { 
    // Convert the data 
    int raw_adc = (data[0] * 256 + data[1]);
    if (raw_adc > 32767) 
    { 
      raw_adc -= 65535; 
    }
    // Output data to screen 
    printf("Analog Data is: %d \n", raw_adc);
    if ( raw_adc > 3200 )
     { 
      printf("Turn on LED\n");
      digitalWrite(29, LOW); // turn on the LED 
      } 
    else { 
        printf("Turn off LED\n"); 
        digitalWrite(29, HIGH);  //turn off the LED
          }
     } 
    }

    编译和测试:

    gcc -o adc -lwiringPi adc.c 

    注意:

  • gcc是编译工具,-o表示定义输出文件名,-lwiringPi表示需要使用wiringPi的库来完成编译代码。
  • 编译后,将在工作目录中获得名为sensor的二进制文件,只需使用此命令执行它:
    while true
    do
    ./adc 
    done

Python编程

  • 如果你喜欢用python好吧,那么就更简单了。直接用adafruit的ads1x15的代码改改就能用。
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # Author: Jacky.Li
    # License: Public Domain
    import time
    import Adafruit_ADS1x15
    import os
    adc = Adafruit_ADS1x15.ADS1115()
    # Choose a gain of 1 for reading voltages from 0 to 4.09V.
    # Or pick a different gain to change the range of voltages that are read:
    # - 2/3 = +/-6.144V
    # - 1 = +/-4.096V
    # - 2 = +/-2.048V
    # - 4 = +/-1.024V
    # - 8 = +/-0.512V
    # - 16 = +/-0.256V
    # See table 3 in the ADS1015/ADS1115 datasheet for more info on gain.
    GAIN = 1
    print("Reading ADS1115 values, press Ctrl-C to quit...") 
    # Main loop. 
    while True:
    # Read all the ADC channel values in a list.
    values = [0]*4
    for i in range(4):
    # Read the specified ADC channel using the previously set gain value.
    values[i] = adc.read_adc(i, gain=GAIN) 
    # Note you can also pass in an optional data_rate parameter that controls 
    # the ADC conversion time (in samples/second). Each chip has a different 
    # set of allowed data rate values, see datasheet Table 9 config register 
    # DR bit values. 
    #values[i] = adc.read_adc(i, gain=GAIN, data_rate=128) 
    # Each value will be a 12 or 16 bit signed integer value depending on the   
    # ADC (ADS1015 = 12-bit, ADS1115 = 16-bit). 
    # Print the ADC values. 
    print(values[1]) 
    # print analog data which detected via ADC AIN1 port.
    if values[1] < 3000: 
        os.system("gpio mode 29 out")
        os.system("gpio write 29 1") 
    else: 
        os.system("gpio mode 29 in") 
    os.system("gpio write 29 0") 
    time.sleep(0.25)</span>

    运行看看效果

    python sensor.py

    嗯,就这样吧,开开脑洞就可以玩儿得更愉快。。哈哈, 白了个白~

树莓派ADC采样光敏电阻来做智能家居控制雏形

又是ADC,还是ADS1115的模块,16bit采样率,很适合做模拟采样。接驳方式:

然后,刻录最新的raspbian镜像,可以从官方下载:https://www.raspberrypi.org/downloads/ 并将TF卡插回Raspberry Pi并打开电源。

请记住打开ssh服务并将你的Pi连接到互联网,以便我们可以下载并安装必要的软件包。

  • 打开终端编辑一个文件:
vim.tiny adc.c
  • 然后用下面的代码:
#include <stdio.h> 
#include <stdlib.h>
#include <linux/i2c-dev.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <unistd.h>

void main() 
{
// Create I2C bus
int file;
char *bus = "/dev/i2c-1";

 if ((file = open(bus, O_RDWR)) < 0)
 {
  printf("Failed to open the bus.\n");
  exit(1);
 }
// Get I2C device, ADS1115 I2C address is 0x48(72)
 ioctl(file, I2C_SLAVE, 0x48);
// Select configuration register(0x01)
// AINP = AIN1 and AINN = GND, +/- 2.048V
// Continuous conversion mode, 128 SPS(0x84, 0x83)
  char config[3] = {0};
  config[0] = 0x01;
  config[1] = 0xD4;
  config[2] = 0x83;
  write(file, config, 3);
  sleep(1);
  // Read 2 bytes of data from register(0x00)
  // raw_adc msb, raw_adc lsb
  char reg[1] = {0x00};
  write(file, reg, 1);
  char data[2]={0};
  if(read(file, data, 2) != 2)
   {
    printf("Error : Input/Output Error\n");
    }
    else
    {
    // Convert the data
    int raw_adc = (data[0] * 256 + data[1]);
    if (raw_adc > 32767)
    {
     raw_adc -= 65535;
     }
     // Output data to screen
     printf("Data: %d\n", raw_adc);
     }
} 

* 保存退出后编译:
 ```bash
gcc -o adc adc.c  -O3  
./adc
  • 执行后可以读取一次,用shell脚本简单调用一下,间隔0.2秒刷新,看看数据状态。
  • 然后简单写个脚本检测抓拍并上传到我的博客后台的服务器,当然了,现在已经关闭了,怕不法分子看到乱上传东西,就这么个意思吧,你们理解了操作步骤就好。然后把光敏电阻放在门夹缝的位置上,如果你没有回家,你家人没有回家,但是光敏电阻值发生了变化, 你就会收到一份邮件,拍到一个尝试盗窃的贼? 或者是一个不明飞行物?
    有兴趣就试试看吧,白了个白~

树莓派通过ADC采样音量大小触发告警提示

有一个问题困扰我,当我制作视频时,如果被噪音干扰会导致失败,失败就得重新录,非常痛苦。

我想,如果有一个设备可以帮助我避免这个问题就好了,手里一堆很早以前买的树莓派,一堆。真的是一堆。

所以突然想到用ADC模块用语音传感器模块进行语音采样,然后通过调整阈值来显示文字或语音提示,让大家保持安静。 


首先,您需要这些组件来构建它。

1. Raspberry Pi 3B 或者3B+

2. 8GB Class 10 TF卡 

3. 5v / 2.5A电源 

4. 4CH 16位ADC For RPi (52pi.taobao.com有售)

5.面包板 没有就焊接~

6.语音传感器(模拟) 淘宝上几块钱可以买一堆。

7.大屏幕(电视机) 

8.跳线

步骤1:

下载最新Raspbian的镜像并将其刻录在TF卡上,建议用etcher这个工具,各种平台上都有它的安装包。

步骤2: 接线,语音采样的模块很便宜,所以基本上没有什么芯片在上面帮我做转换,但是我看到了比较器芯片,我这里不要数字信号,因为只有0和1的信号我无法判断音量的大小。

所以我选择了模块的模拟引脚,A0。 

然后因为AIN0 上面接了NTC,所以避开了AIN0 ,直接接在了AIN1 通道上面,就是黄色的线缆,然后供电用的是树莓派的3.3v, GND接树莓派。一切都很自然就搞定了。

当然为了方便展示我开专门插了一个0.91英寸的OLED,虽然这个项目里面没有用到。但是真的很好用,芯片就是ssd1306. 简单粗暴的很~

就像这样连接起来,上面有两个跳线帽,记得要接,一个是I2C地址的跳线帽,就是0x48的哪个, 还有一个是NTC接到AIN0通道的跳线帽,如果接通就可以通过NTC读取模拟的温度值了,实际上并不是温度,而是电压,要通过电压来进行换算的,后面再说这问题。

第3步:

将Raspberry Pi连接到互联网并更新软件,并安装名为“figlet”的软件, 当噪音等级的数量达到一个值的时候,它将被调出并显示“请TM安静!”,当然是显示在你的屏幕上,我觉得可以扩展的东西很多,可以加个超级功放, 然后搞个大功率的喇叭,提前录好声音,猛猛的一嗓子,直接让闹腾的家伙瞬间安静下来。

 

然后编写一个代码来采用adc:

编译一下:  

gcc -o adc adc.c

sudo cp adc  /bin/adc   为了方便使用,我就没有去修改PATH变量的内容,直接将编译出来的工具放在/bin下面了,方便我调用。

然后写个shell脚本,开机自动加载也比较方便。

vim.tiny  notify.sh

保存退出后,给文件执行权,然后测试一下。

chmod +x notify.sh

./notify.sh

对着麦克风来一嗓子,屏幕上应该是这样:

你还可以搞点儿别的什么,反正能够采集声音了,就达到了让树莓派采集ADC的消息的功能,非常方便弄别的项目,你可以自己看看,开开脑洞。

白了个白~

 

 

树莓派Nintendo专用退出游戏按钮

小时候玩儿任天堂的游戏的时候,如果想退出游戏,直接按reset键就出来了,可以重新选择,可是我现在用的是retropie模拟任天堂,那么问题来了,如果要映射热键去跳出游戏,默认官方已经设置了select+start的热键是针对LR系列的模拟器,如果是LR系列的模拟器,这样一起按就可以退出游戏回到es界面,但是对于其他的模拟器:如DOSBox、Mupen64plus、DGen、PPSSPP、MAME4ALL、AdvanceMAME等其他非LR系列的模拟器,就不适用于RetroArch的的热键了,这时候要回到ES系統首页,就非常麻烦,所以就可以做一款通过硬件的reset回到ES首页的功能。

硬件需求:

-------------------

1 x  非自锁开关1个

杜邦线若干

树莓派 2B/3B/3B+/3A+/zero /zero w 均可

1x 16GB class 10 SD卡

1x HDMI 线

1x 5v/2.5A电源

---------------------

然后,烧录好retropie系统,并且联网更新,打开ssh, 基本配置搞定了再来接下来的操作。

利用了GPIO的37 pin和39pin ,分别代表 GPIO26和GND

然后软件配置更简单:

1. ssh远程连接到树莓派。

2. 建立一个目录

sudo mkdir  scripts

cd scripts/

sudo touch ExitEmu.py

3. 编辑这个文件然后填写:

from time import sleep 

import os

import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM) # 使用BCM的命名方式

GPIO.setup(26, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

 

def  exitEmulator(channel):

    print('exitEmulator')

   os.system('killall retroarch')

    pids = [pid for pid in os.listdir('/proc') if  pid.isdigit() ]

    for pid in pids:

        try:

            commandpath = open(os.path.join('/proc', pid, 'cmdline'), 'rb').read()

             if commandpath[0:24] == '/opt/retropie/emulators/':

                 os.system('kill -QUIT %s'  %  pid)

                 print('kill -QUIT  %s'  %  pid) 

        except  IOError:

            continue

GPIO.add_event_detect(26, GPIO.RISING, callback=exitEmulator, bouncetime=500)

while True:

    sleep(10)

保存退出后直接执行测试一下:

sudo python ExitEmu.py

然后按下按钮,如果看到屏幕上出现: exitEmulator 及 retroarch两行字符串代表指令成功了。

接下来让它能够开机自动启动就好了。

直接编辑:/etc/rc.local,添加刚才的脚本。

sudo vim.tiny /etc/rc.local 

在exit 0之前填写:

sudo python  /home/pi/scripts/ExitEmu.py &   

然后保存退出后重启你的树莓派,就可以尝试使用你的按键了。是不是感觉非常方便呢?

 

参考:

*  https://forum.recalbox.com/topic/3504/emulator-exit-button-gpio/10

* https://www.element14.com/community/docs/DOC-78055/l/adding-a-shutdown-button-to-the-raspberry-pi-b

* https://learn.adafruit.com/retro-gaming-with-raspberry-pi/adding-controls-software?view=all

* https://www.reddit.com/r/raspberry_pi/comments/2yw4fn/finally_set_up_retropie_complete_with_a_gpio/

* http://raspberrypi.stackexchange.com/questions/40311/how-can-i-add-an-on-off-switch-to-my-raspberry-pi-2

 

 

 

Retropie汉化的方法

很多时候,新安装的retropie系统没有中文,很多玩家很郁闷,就各种吐槽,各种不爽,毕竟游戏还是要简单易懂的话看起来才舒服,所以打开了retropie的源码看了看,是因为内置的字体库不兼容导致的,所以安装字体,调整一下就可以显示中文了。

继续阅读Retropie汉化的方法

Mariadb 的总是运行着就挂了的解决方法

前不久因为之前的 VPS 有问题,所以就在阿里云重建了自己的博客, 满心欢喜的使用的时候发现他很快就挂了...

我检查后台发现mariadb is dead, 又是数据库挂, 很纠结. 查了一下,发现很多人都遇到一样的问题, 看到一篇帖子提到了配置,我检查我的数据库配置,其实咩有做什么特别的,也没有深度优化,就是最基本的,为何还会挂? 检查日志发现...狗日的内存不够了.直接显示 out of memory...

free -m 检查发现果然内容不够用了.

还发现 swap 分区基本都是空的.

所以, 我们需要尝试去创建一个交换文件

继续阅读Mariadb 的总是运行着就挂了的解决方法